[llvm-commits] [llvm] r41091 - /llvm/trunk/lib/Transforms/Utils/CloneLoop.cpp

Devang Patel dpatel at apple.com
Tue Aug 14 16:59:17 PDT 2007


Author: dpatel
Date: Tue Aug 14 18:59:17 2007
New Revision: 41091

URL: http://llvm.org/viewvc/llvm-project?rev=41091&view=rev
Log:
Break infinite loop.

Modified:
    llvm/trunk/lib/Transforms/Utils/CloneLoop.cpp

Modified: llvm/trunk/lib/Transforms/Utils/CloneLoop.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/CloneLoop.cpp?rev=41091&r1=41090&r2=41091&view=diff

==============================================================================
--- llvm/trunk/lib/Transforms/Utils/CloneLoop.cpp (original)
+++ llvm/trunk/lib/Transforms/Utils/CloneLoop.cpp Tue Aug 14 18:59:17 2007
@@ -84,22 +84,21 @@
   }
 
   SmallVector<BasicBlock *, 16> NewBlocks;
-  SmallVector<std::pair<Loop *, Loop::iterator>, 8> LoopNest;
-  LoopNest.push_back(std::make_pair(OrigL, OrigL->begin()));
-  
-  Loop *NewLoop = NULL;
-  while (!LoopNest.empty()) {
-    Loop *L = LoopNest.back().first;
-    Loop::iterator SubLoop = LoopNest.back().second;
-    
-    // Handle sub loops.
-    if (SubLoop != L->end()) {
-      Loop *SL  = *SubLoop;
-      LoopNest.push_back(std::make_pair(SL, SL->begin()));
-    } 
 
+  // Populate loop nest.
+  SmallVector<Loop *, 8> LoopNest;
+  LoopNest.push_back(OrigL);
+
+
+  Loop *NewParentLoop = NULL;
+  while (!LoopNest.empty()) {
+    Loop *L = LoopNest.back();
     LoopNest.pop_back();
-    NewLoop = new Loop();
+    Loop *NewLoop = new Loop();
+
+    if (!NewParentLoop)
+      NewParentLoop = NewLoop;
+
     LPM->insertLoop(NewLoop, L->getParentLoop());
 
     // Clone Basic Blocks.
@@ -122,6 +121,9 @@
         CloneDominatorInfo(BB, ValueMap, DT, DF);
       }
 
+    // Process sub loops
+    for (Loop::iterator I = L->begin(), E = L->end(); I != E; ++I)
+      LoopNest.push_back(*I);
   }
 
   // Remap instructions to reference operands from ValueMap.
@@ -145,5 +147,5 @@
   Function *F = Latch->getParent();
   F->getBasicBlockList().insert(Latch, NewBlocks.begin(), NewBlocks.end());
 
-  return NewLoop;
+  return NewParentLoop;
 }





More information about the llvm-commits mailing list