From 56ad4048ae7d0830422e8ef6a9cf3599bc16fa60 Mon Sep 17 00:00:00 2001 From: Michael Zolotukhin Date: Thu, 7 Apr 2016 00:09:42 +0000 Subject: [PATCH] Follow-up for r265605: don't mutate vector we're iterating. llvm-svn: 265625 --- llvm/lib/Transforms/Utils/LoopUnroll.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) 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); } } -- 2.7.4