Follow-up for r265605: don't mutate vector we're iterating.
authorMichael Zolotukhin <mzolotukhin@apple.com>
Thu, 7 Apr 2016 00:09:42 +0000 (00:09 +0000)
committerMichael Zolotukhin <mzolotukhin@apple.com>
Thu, 7 Apr 2016 00:09:42 +0000 (00:09 +0000)
llvm-svn: 265625

llvm/lib/Transforms/Utils/LoopUnroll.cpp

index e984042..10223c3 100644 (file)
@@ -563,13 +563,15 @@ bool llvm::UnrollLoop(Loop *L, unsigned Count, unsigned TripCount,
   if (DT && Count > 1) {
     for (auto *BB : OriginalLoopBlocks) {
       auto *BBDomNode = DT->getNode(BB);
+      SmallVector<BasicBlock *, 16> ChildrenToUpdate;
       for (auto *ChildDomNode : BBDomNode->getChildren()) {
         auto *ChildBB = ChildDomNode->getBlock();
-        if (L->contains(ChildBB))
-          continue;
-        BasicBlock *NewIDom = DT->findNearestCommonDominator(BB, Latches[0]);
-        DT->changeImmediateDominator(ChildBB, NewIDom);
+        if (!L->contains(ChildBB))
+          ChildrenToUpdate.push_back(ChildBB);
       }
+      BasicBlock *NewIDom = DT->findNearestCommonDominator(BB, Latches[0]);
+      for (auto *ChildBB : ChildrenToUpdate)
+        DT->changeImmediateDominator(ChildBB, NewIDom);
     }
   }