summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/Scalar/LoopSimplify.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2002-09-29 21:41:38 +0000
committerChris Lattner <sabre@nondot.org>2002-09-29 21:41:38 +0000
commit03a9e15a9f42fac6fb9814af032351e188857dfe (patch)
treea974e191cba4957ab81ab4a386416840e2957045 /llvm/lib/Transforms/Scalar/LoopSimplify.cpp
parent85dd58c2cbba48bf1e846ff708261f578409846d (diff)
downloadbcm5719-llvm-03a9e15a9f42fac6fb9814af032351e188857dfe.tar.gz
bcm5719-llvm-03a9e15a9f42fac6fb9814af032351e188857dfe.zip
Fix major bugs in dominator set & tree information updating
llvm-svn: 3975
Diffstat (limited to 'llvm/lib/Transforms/Scalar/LoopSimplify.cpp')
-rw-r--r--llvm/lib/Transforms/Scalar/LoopSimplify.cpp15
1 files changed, 9 insertions, 6 deletions
diff --git a/llvm/lib/Transforms/Scalar/LoopSimplify.cpp b/llvm/lib/Transforms/Scalar/LoopSimplify.cpp
index 76cc32e2a42..1432b1ca621 100644
--- a/llvm/lib/Transforms/Scalar/LoopSimplify.cpp
+++ b/llvm/lib/Transforms/Scalar/LoopSimplify.cpp
@@ -153,14 +153,18 @@ void Preheaders::InsertPreheaderForLoop(Loop *L) {
// Update dominator information if it is around...
if (DominatorSet *DS = getAnalysisToUpdate<DominatorSet>()) {
- // We need to add information about the fact that NewBB dominates Header.
- DS->addDominator(Header, NewBB);
-
// The blocks that dominate NewBB are the blocks that dominate Header,
// minus Header, plus NewBB.
DominatorSet::DomSetType DomSet = DS->getDominators(Header);
+ DomSet.insert(NewBB); // We dominate ourself
DomSet.erase(Header); // Header does not dominate us...
DS->addBasicBlock(NewBB, DomSet);
+
+ // The newly created basic block dominates all nodes dominated by Header.
+ for (Function::iterator I = Header->getParent()->begin(),
+ E = Header->getParent()->end(); I != E; ++I)
+ if (DS->dominates(Header, I))
+ DS->addDominator(I, NewBB);
}
// Update immediate dominator information if we have it...
@@ -178,11 +182,10 @@ void Preheaders::InsertPreheaderForLoop(Loop *L) {
// the old header.
//
DominatorTree::Node *HeaderNode = DT->getNode(Header);
- DominatorTree::Node *PHNode = DT->createNewNode(NewBB, HeaderNode);
+ DominatorTree::Node *PHNode = DT->createNewNode(NewBB,
+ HeaderNode->getIDom());
// Change the header node so that PNHode is the new immediate dominator
DT->changeImmediateDominator(HeaderNode, PHNode);
}
}
-
-
OpenPOWER on IntegriCloud