From: sandeep Date: Sat, 2 Mar 2002 18:42:16 +0000 (+0000) Subject: Better fix for bug # 514308 X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=67004551c261d35b69228d8d356e1d277b71c071;p=fw%2Fsdcc Better fix for bug # 514308 git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@1977 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- 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 */