Hacked const and volatile modifiers a bit
[fw/sdcc] / src / SDCCloop.c
index 21d16bacd661e572d10619a1a18f420bde57d648..dbad1e4c90f8ce22a18f64de2632a6d0456fdab2 100644 (file)
@@ -324,6 +324,23 @@ DEFSETFUNC (createLoop)
 #endif
 
   aloop->entry = ep->to;
+
+#ifdef LIVERANGEHUNT
+  // now also include those blocks that conditionally escape from this loop 
+  for (i=1; i<count; i++) {
+    if (ebbs[i]->hasConditionalExit) {
+      for (block=setFirstItem(aloop->regBlocks); 
+          block; 
+          block=setNextItem(aloop->regBlocks)) {
+       if (isinSet(block->predList, ebbs[i])) {
+         printf ("%s has a forced exit from %s\n", 
+                 ebbs[i]->entryLabel->name, 
+                 block->entryLabel->name);
+       }
+      }
+    }
+  }    
+#else
   /* set max & min dfNum for loopRegion */
   for ( block = setFirstItem(aloop->regBlocks); block; 
        block = setNextItem(aloop->regBlocks)) {
@@ -338,14 +355,11 @@ DEFSETFUNC (createLoop)
           ebbs[i]->dfnum < dfMax &&
          !isinSet(aloop->regBlocks,ebbs[i])) {
          if (!ebbs[i]->partOfLoop) {
-#if !defined(LIVERANGEHUNT)
            ebbs[i]->partOfLoop = aloop;
-#else
-           loopInsert(&aloop->regBlocks,ebbs[i]);
-#endif
          }
       }
   }
+#endif
 
 #ifdef LIVERANGEHUNT
   printf ("================\n");