From 827826320d204115d6a52ac7489e911ef7fab577 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sun, 18 Apr 2004 22:27:10 +0000 Subject: Correct rewriting of exit blocks after my last patch llvm-svn: 13048 --- llvm/lib/Transforms/Scalar/LoopSimplify.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'llvm/lib/Transforms/Scalar/LoopSimplify.cpp') diff --git a/llvm/lib/Transforms/Scalar/LoopSimplify.cpp b/llvm/lib/Transforms/Scalar/LoopSimplify.cpp index 167075f3be3..b2752089d44 100644 --- a/llvm/lib/Transforms/Scalar/LoopSimplify.cpp +++ b/llvm/lib/Transforms/Scalar/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 -- cgit v1.2.3