From: Chris Lattner Date: Mon, 9 Jan 2006 08:03:08 +0000 (+0000) Subject: Teach loopsimplify to update et-forest. Patch contributed by Daniel Berlin! X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=baec98d00bda1cc904405d92716ea9d2f4c1fe9d;p=oota-llvm.git Teach loopsimplify to update et-forest. Patch contributed by Daniel Berlin! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25153 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Transforms/Utils/LoopSimplify.cpp b/lib/Transforms/Utils/LoopSimplify.cpp index 2df10ce92f4..af0fe7820e6 100644 --- a/lib/Transforms/Utils/LoopSimplify.cpp +++ b/lib/Transforms/Utils/LoopSimplify.cpp @@ -69,6 +69,7 @@ namespace { AU.addPreserved(); AU.addPreserved(); AU.addPreserved(); + AU.addPreserved(); AU.addPreserved(); AU.addPreserved(); AU.addPreservedID(BreakCriticalEdgesID); // No critical edges added. @@ -334,6 +335,7 @@ void LoopSimplify::InsertPreheaderForLoop(Loop *L) { // the old header. DominatorTree::Node *PHDomTreeNode = DT.createNewNode(NewBB, DT.getNode(Header)->getIDom()); + BasicBlock *oldHeaderIDom = DT.getNode(Header)->getIDom()->getBlock(); // Change the header node so that PNHode is the new immediate dominator DT.changeImmediateDominator(DT.getNode(Header), PHDomTreeNode); @@ -359,6 +361,15 @@ void LoopSimplify::InsertPreheaderForLoop(Loop *L) { // The preheader now is the immediate dominator for the header node... ID->setImmediateDominator(Header, NewBB); } + + // Update ET Forest information if we have it... + if (ETForest *EF = getAnalysisToUpdate()) { + // Whatever i-dominated the header node now immediately dominates NewBB + EF->addNewBlock(NewBB, oldHeaderIDom); + + // The preheader now is the immediate dominator for the header node... + EF->setImmediateDominator(Header, NewBB); + } // Update dominance frontier information... if (DominanceFrontier *DF = getAnalysisToUpdate()) { @@ -762,6 +773,7 @@ void LoopSimplify::UpdateDomInfoForRevectoredPreds(BasicBlock *NewBB, NewBBIDomNode = NewBBIDomNode->getIDom(); assert(NewBBIDomNode && "No shared dominator found??"); } + NewBBIDom = NewBBIDomNode->getBlock(); } // Create the new dominator tree node... and set the idom of NewBB. @@ -775,6 +787,13 @@ void LoopSimplify::UpdateDomInfoForRevectoredPreds(BasicBlock *NewBB, } } + // Update ET-Forest information if it is active. + if (ETForest *EF = getAnalysisToUpdate()) { + EF->addNewBlock(NewBB, NewBBIDom); + if (NewBBDominatesNewBBSucc) + EF->setImmediateDominator(NewBBSucc, NewBB); + } + // Update dominance frontier information... if (DominanceFrontier *DF = getAnalysisToUpdate()) { // If NewBB dominates NewBBSucc, then DF(NewBB) is now going to be the