From 74cd04ea0154defa837a6d4c12bad29aae44e5b6 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Fri, 28 Feb 2003 03:07:54 +0000 Subject: Fix bug: LICM/2003-02-27-PreheaderExitNodeUpdate.ll git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5667 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/Utils/LoopSimplify.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/Transforms/Utils/LoopSimplify.cpp b/lib/Transforms/Utils/LoopSimplify.cpp index c5adfd2..3759f44 100644 --- a/lib/Transforms/Utils/LoopSimplify.cpp +++ b/lib/Transforms/Utils/LoopSimplify.cpp @@ -28,6 +28,7 @@ #include "llvm/Support/CFG.h" #include "Support/SetOperations.h" #include "Support/Statistic.h" +#include "Support/DepthFirstIterator.h" namespace { Statistic<> NumInserted("preheaders", "Number of pre-header nodes inserted"); @@ -303,7 +304,10 @@ void Preheaders::RewriteLoopExitBlock(Loop *L, BasicBlock *Exit) { // loop of L. if (Loop *Parent = L->getParentLoop()) Parent->addBasicBlockToLoop(NewBB, getAnalysis()); - L->changeExitBlock(Exit, NewBB); // Update exit block information + + // Replace any instances of Exit with NewBB in this and any nested loops... + for (df_iterator I = df_begin(L), E = df_end(L); I != E; ++I) + I->changeExitBlock(Exit, NewBB); // Update exit block information // Update dominator information... The blocks that dominate NewBB are the // intersection of the dominators of predecessors, plus the block itself. -- cgit v1.1