]> git.gag.com Git - fw/sdcc/blobdiff - src/SDCCcse.c
fixed bug # 470722
[fw/sdcc] / src / SDCCcse.c
index e98b3724522cc7253bd646930e214ab45a1172f1..f3c27a55d521356f4bfe78a6a8c21be52135a95c 100644 (file)
@@ -1513,6 +1513,13 @@ cseBBlock (eBBlock * ebb, int computeOnly,
          if (pdic && compareType (operandType (IC_RESULT (pdic)),
                                 operandType (IC_RESULT (ic))) != 1)
            pdic = NULL;
+
+         // TODO: this must go, a weak fix for bug #467035
+         if (pdic && (pdic->level > ic->level)) {
+           // pdic was inside an inner loop
+           pdic = NULL;
+         }
+         
        }
 
       /* if found then eliminate this and add to */
@@ -1523,11 +1530,6 @@ cseBBlock (eBBlock * ebb, int computeOnly,
          if (IS_ITEMP (IC_RESULT (ic)))
            {
              
-             if (pdic->level > ic->level) {
-               // pdic was inside an inner loop
-               continue;
-             }
-
              /* replace in the remaining of this block */
              replaceAllSymBySym (ic->next, IC_RESULT (ic), IC_RESULT (pdic), &ebb->ndompset);
              /* remove this iCode from inexpressions of all