From: Michael Zolotukhin Date: Thu, 7 Apr 2016 00:09:42 +0000 (+0000) Subject: Follow-up for r265605: don't mutate vector we're iterating. X-Git-Tag: llvmorg-3.9.0-rc1~9788 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=56ad4048ae7d0830422e8ef6a9cf3599bc16fa60;p=platform%2Fupstream%2Fllvm.git Follow-up for r265605: don't mutate vector we're iterating. llvm-svn: 265625 --- diff --git a/llvm/lib/Transforms/Utils/LoopUnroll.cpp b/llvm/lib/Transforms/Utils/LoopUnroll.cpp index e984042..10223c3 100644 --- a/llvm/lib/Transforms/Utils/LoopUnroll.cpp +++ b/llvm/lib/Transforms/Utils/LoopUnroll.cpp @@ -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 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); } }