X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2FSDCCcse.c;h=a5ea44f393830ed470c338d37be4d7b054051f5a;hb=2c02e0d7cccdf186aea6a2cda046afe06aa094a3;hp=6141c05bfb2e8c8a98342158e5d2e752696fe32c;hpb=3fce831ce807979933ca71ae6ad79ef78f606e99;p=fw%2Fsdcc 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 */