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; } _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits