Fix the requisite bug that I introduced
authorChris Lattner <sabre@nondot.org>
Thu, 20 Feb 2003 00:28:00 +0000 (00:28 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 20 Feb 2003 00:28:00 +0000 (00:28 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5605 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/LoopInfo.cpp

index ef4b6430ba2ad4aa1b0c511569c00e25b1cb18fa..70bf97caccd0d73edafeb56efcfa15411c5f8e1a 100644 (file)
@@ -155,17 +155,19 @@ Loop *LoopInfo::ConsiderForLoop(BasicBlock *BB, const DominatorSet &DS) {
           // now by moving the loop into the correct subloop.
           //
           Loop *SubLoop = BBMI->second;
-          Loop *OldSubLoopParent = SubLoop->getParentLoop();
-          if (OldSubLoopParent != L) {
-            // Remove SubLoop from OldSubLoopParent's list of subloops...
-            std::vector<Loop*>::iterator I =
-              std::find(OldSubLoopParent->SubLoops.begin(),
-                        OldSubLoopParent->SubLoops.end(), SubLoop);
-            assert(I != OldSubLoopParent->SubLoops.end()
-                   && "Loop parent doesn't contain loop?");
-            OldSubLoopParent->SubLoops.erase(I);
-            SubLoop->ParentLoop = L;
-            L->SubLoops.push_back(SubLoop);
+          if (SubLoop->getHeader() == *I) { // Only do this once for the loop...
+            Loop *OldSubLoopParent = SubLoop->getParentLoop();
+            if (OldSubLoopParent != L) {
+              // Remove SubLoop from OldSubLoopParent's list of subloops...
+              std::vector<Loop*>::iterator I =
+                std::find(OldSubLoopParent->SubLoops.begin(),
+                          OldSubLoopParent->SubLoops.end(), SubLoop);
+              assert(I != OldSubLoopParent->SubLoops.end()
+                     && "Loop parent doesn't contain loop?");
+              OldSubLoopParent->SubLoops.erase(I);
+              SubLoop->ParentLoop = L;
+              L->SubLoops.push_back(SubLoop);
+            }
           }
         }
       }