From: Chris Lattner Date: Sun, 18 Apr 2004 22:27:10 +0000 (+0000) Subject: Correct rewriting of exit blocks after my last patch X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=59fb87d469b9b38b0f4c1e31a2f34fa8f09b981d;p=oota-llvm.git Correct rewriting of exit blocks after my last patch git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13048 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Transforms/Utils/LoopSimplify.cpp b/lib/Transforms/Utils/LoopSimplify.cpp index 167075f3be3..b2752089d44 100644 --- a/lib/Transforms/Utils/LoopSimplify.cpp +++ b/lib/Transforms/Utils/LoopSimplify.cpp @@ -73,7 +73,7 @@ namespace { bool ProcessLoop(Loop *L); BasicBlock *SplitBlockPredecessors(BasicBlock *BB, const char *Suffix, const std::vector &Preds); - void RewriteLoopExitBlock(Loop *L, BasicBlock *Exit); + BasicBlock *RewriteLoopExitBlock(Loop *L, BasicBlock *Exit); void InsertPreheaderForLoop(Loop *L); Loop *SeparateNestedLoop(Loop *L); void InsertUniqueBackedgeBlock(Loop *L); @@ -158,7 +158,11 @@ bool LoopSimplify::ProcessLoop(Loop *L) { for (pred_iterator PI = pred_begin(ExitBlock), PE = pred_end(ExitBlock); PI != PE; ++PI) if (!L->contains(*PI)) { - RewriteLoopExitBlock(L, ExitBlock); + BasicBlock *NewBB = RewriteLoopExitBlock(L, ExitBlock); + for (unsigned j = i; j != ExitBlocks.size(); ++j) + if (ExitBlocks[j] == ExitBlock) + ExitBlocks[j] = NewBB; + NumInserted++; Changed = true; break; @@ -387,7 +391,7 @@ void LoopSimplify::InsertPreheaderForLoop(Loop *L) { /// RewriteLoopExitBlock - Ensure that the loop preheader dominates all exit /// blocks. This method is used to split exit blocks that have predecessors /// outside of the loop. -void LoopSimplify::RewriteLoopExitBlock(Loop *L, BasicBlock *Exit) { +BasicBlock *LoopSimplify::RewriteLoopExitBlock(Loop *L, BasicBlock *Exit) { DominatorSet &DS = getAnalysis(); std::vector LoopBlocks; @@ -405,6 +409,7 @@ void LoopSimplify::RewriteLoopExitBlock(Loop *L, BasicBlock *Exit) { // Update dominator information (set, immdom, domtree, and domfrontier) UpdateDomInfoForRevectoredPreds(NewBB, LoopBlocks); + return NewBB; } /// AddBlockAndPredsToSet - Add the specified block, and all of its