From 67004551c261d35b69228d8d356e1d277b71c071 Mon Sep 17 00:00:00 2001 From: sandeep Date: Sat, 2 Mar 2002 18:42:16 +0000 Subject: [PATCH] Better fix for bug # 514308 git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@1977 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- src/SDCCcse.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/SDCCcse.c b/src/SDCCcse.c index 6141c05b..a5ea44f3 100644 --- a/src/SDCCcse.c +++ b/src/SDCCcse.c @@ -1539,6 +1539,10 @@ cseBBlock (eBBlock * ebb, int computeOnly, { if (IS_ITEMP (pdop) || IS_OP_LITERAL (pdop)) { + /* some non dominating block does POINTER_SET with + this variable .. unsafe to remove any POINTER_GETs */ + if (bitVectBitValue(ebb->ndompset,IC_LEFT(ic)->key)) + ebb->ptrsSet = bitVectSetBit(ebb->ptrsSet,pdop->key); IC_LEFT (ic) = pdop; change = 1; } @@ -1617,7 +1621,7 @@ cseBBlock (eBBlock * ebb, int computeOnly, /* Alternate code */ if (pdic && IS_ITEMP(IC_RESULT(ic))) { - if (POINTER_GET(ic) && (pdic->level < ic->level)) { + if (POINTER_GET(ic) && bitVectBitValue(ebb->ptrsSet,IC_LEFT(ic)->key)) { /* Mmm, found an equivalent pointer get at a lower level. This could be a loop however with the same pointer set later on */ -- 2.47.2