From 2da606c75778b5bc2274046618d2fcad9870c0dc Mon Sep 17 00:00:00 2001 From: Owen Anderson Date: Fri, 20 Apr 2007 06:27:13 +0000 Subject: [PATCH] Move more passes to using ETForest instead of DominatorTree. llvm-svn: 36271 --- .../llvm/Transforms/Utils/PromoteMemToReg.h | 4 ++-- llvm/lib/Transforms/Scalar/LICM.cpp | 7 ++----- .../Scalar/ScalarReplAggregates.cpp | 6 +++--- llvm/lib/Transforms/Utils/Mem2Reg.cpp | 6 +++--- .../Utils/PromoteMemoryToRegister.cpp | 19 +++++++++---------- 5 files changed, 19 insertions(+), 23 deletions(-) diff --git a/llvm/include/llvm/Transforms/Utils/PromoteMemToReg.h b/llvm/include/llvm/Transforms/Utils/PromoteMemToReg.h index 44b11d7203ef..a17e98c1f51f 100644 --- a/llvm/include/llvm/Transforms/Utils/PromoteMemToReg.h +++ b/llvm/include/llvm/Transforms/Utils/PromoteMemToReg.h @@ -20,7 +20,7 @@ namespace llvm { class AllocaInst; -class DominatorTree; +class ETForest; class DominanceFrontier; class TargetData; class AliasSetTracker; @@ -39,7 +39,7 @@ bool isAllocaPromotable(const AllocaInst *AI, const TargetData &TD); /// made to the IR. /// void PromoteMemToReg(const std::vector &Allocas, - DominatorTree &DT, DominanceFrontier &DF, + ETForest &ET, DominanceFrontier &DF, const TargetData &TD, AliasSetTracker *AST = 0); } // End llvm namespace diff --git a/llvm/lib/Transforms/Scalar/LICM.cpp b/llvm/lib/Transforms/Scalar/LICM.cpp index c9ade92804ae..3b71497dcb18 100644 --- a/llvm/lib/Transforms/Scalar/LICM.cpp +++ b/llvm/lib/Transforms/Scalar/LICM.cpp @@ -73,7 +73,6 @@ namespace { AU.addRequiredID(LoopSimplifyID); AU.addRequired(); AU.addRequired(); - AU.addRequired(); // For scalar promotion (mem2reg) AU.addRequired(); // For scalar promotion (mem2reg) AU.addRequired(); } @@ -88,7 +87,6 @@ namespace { AliasAnalysis *AA; // Current AliasAnalysis information LoopInfo *LI; // Current LoopInfo ETForest *ET; // ETForest for the current Loop... - DominatorTree *DT; // Dominator Tree for the current Loop... DominanceFrontier *DF; // Current Dominance Frontier // State that is updated as we process loops @@ -215,7 +213,6 @@ bool LICM::runOnLoop(Loop *L, LPPassManager &LPM) { AA = &getAnalysis(); DF = &getAnalysis(); ET = &getAnalysis(); - DT = &getAnalysis(); CurAST = new AliasSetTracker(*AA); // Collect Alias info frmo subloops @@ -554,7 +551,7 @@ void LICM::sink(Instruction &I) { if (AI) { std::vector Allocas; Allocas.push_back(AI); - PromoteMemToReg(Allocas, *DT, *DF, AA->getTargetData(), CurAST); + PromoteMemToReg(Allocas, *ET, *DF, AA->getTargetData(), CurAST); } } } @@ -735,7 +732,7 @@ void LICM::PromoteValuesInLoop() { PromotedAllocas.reserve(PromotedValues.size()); for (unsigned i = 0, e = PromotedValues.size(); i != e; ++i) PromotedAllocas.push_back(PromotedValues[i].first); - PromoteMemToReg(PromotedAllocas, *DT, *DF, AA->getTargetData(), CurAST); + PromoteMemToReg(PromotedAllocas, *ET, *DF, AA->getTargetData(), CurAST); } /// FindPromotableValuesInLoop - Check the current loop for stores to definite diff --git a/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp b/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp index 5bbb5aef03f0..6e9dc035c227 100644 --- a/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp +++ b/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp @@ -53,7 +53,7 @@ namespace { // getAnalysisUsage - This pass does not require any passes, but we know it // will not alter the CFG, so say so. virtual void getAnalysisUsage(AnalysisUsage &AU) const { - AU.addRequired(); + AU.addRequired(); AU.addRequired(); AU.addRequired(); AU.setPreservesCFG(); @@ -100,7 +100,7 @@ bool SROA::runOnFunction(Function &F) { bool SROA::performPromotion(Function &F) { std::vector Allocas; const TargetData &TD = getAnalysis(); - DominatorTree &DT = getAnalysis(); + ETForest &ET = getAnalysis(); DominanceFrontier &DF = getAnalysis(); BasicBlock &BB = F.getEntryBlock(); // Get the entry node for the function @@ -119,7 +119,7 @@ bool SROA::performPromotion(Function &F) { if (Allocas.empty()) break; - PromoteMemToReg(Allocas, DT, DF, TD); + PromoteMemToReg(Allocas, ET, DF, TD); NumPromoted += Allocas.size(); Changed = true; } diff --git a/llvm/lib/Transforms/Utils/Mem2Reg.cpp b/llvm/lib/Transforms/Utils/Mem2Reg.cpp index 6e2bcb08fe36..9bcf0ab64867 100644 --- a/llvm/lib/Transforms/Utils/Mem2Reg.cpp +++ b/llvm/lib/Transforms/Utils/Mem2Reg.cpp @@ -36,7 +36,7 @@ namespace { // getAnalysisUsage - We need dominance frontiers // virtual void getAnalysisUsage(AnalysisUsage &AU) const { - AU.addRequired(); + AU.addRequired(); AU.addRequired(); AU.addRequired(); AU.setPreservesCFG(); @@ -60,7 +60,7 @@ bool PromotePass::runOnFunction(Function &F) { bool Changed = false; - DominatorTree &DT = getAnalysis(); + ETForest &ET = getAnalysis(); DominanceFrontier &DF = getAnalysis(); while (1) { @@ -75,7 +75,7 @@ bool PromotePass::runOnFunction(Function &F) { if (Allocas.empty()) break; - PromoteMemToReg(Allocas, DT, DF, TD); + PromoteMemToReg(Allocas, ET, DF, TD); NumPromoted += Allocas.size(); Changed = true; } diff --git a/llvm/lib/Transforms/Utils/PromoteMemoryToRegister.cpp b/llvm/lib/Transforms/Utils/PromoteMemoryToRegister.cpp index be8042385259..25d9ef50ecac 100644 --- a/llvm/lib/Transforms/Utils/PromoteMemoryToRegister.cpp +++ b/llvm/lib/Transforms/Utils/PromoteMemoryToRegister.cpp @@ -88,7 +88,7 @@ namespace { /// std::vector Allocas; SmallVector &RetryList; - DominatorTree &DT; + ETForest &ET; DominanceFrontier &DF; const TargetData &TD; @@ -127,10 +127,10 @@ namespace { public: PromoteMem2Reg(const std::vector &A, - SmallVector &Retry, DominatorTree &dt, + SmallVector &Retry, ETForest &et, DominanceFrontier &df, const TargetData &td, AliasSetTracker *ast) - : Allocas(A), RetryList(Retry), DT(dt), DF(df), TD(td), AST(ast) {} + : Allocas(A), RetryList(Retry), ET(et), DF(df), TD(td), AST(ast) {} void run(); @@ -139,13 +139,13 @@ namespace { bool properlyDominates(Instruction *I1, Instruction *I2) const { if (InvokeInst *II = dyn_cast(I1)) I1 = II->getNormalDest()->begin(); - return DT[I1->getParent()]->properlyDominates(DT[I2->getParent()]); + return ET.properlyDominates(I1->getParent(), I2->getParent()); } /// dominates - Return true if BB1 dominates BB2 using the DominatorTree. /// bool dominates(BasicBlock *BB1, BasicBlock *BB2) const { - return DT[BB1]->dominates(DT[BB2]); + return ET.dominates(BB1, BB2); } private: @@ -534,8 +534,7 @@ void PromoteMem2Reg::MarkDominatingPHILive(BasicBlock *BB, unsigned AllocaNum, SmallPtrSet &DeadPHINodes) { // Scan the immediate dominators of this block looking for a block which has a // PHI node for Alloca num. If we find it, mark the PHI node as being alive! - for (DominatorTree::Node *N = DT[BB]; N; N = N->getIDom()) { - BasicBlock *DomBB = N->getBlock(); + for (BasicBlock* DomBB = BB; DomBB; DomBB = ET.getIDom(DomBB)) { DenseMap, PHINode*>::iterator I = NewPhiNodes.find(std::make_pair(DomBB, AllocaNum)); if (I != NewPhiNodes.end()) { @@ -806,13 +805,13 @@ void PromoteMem2Reg::RenamePass(BasicBlock *BB, BasicBlock *Pred, /// made to the IR. /// void llvm::PromoteMemToReg(const std::vector &Allocas, - DominatorTree &DT, DominanceFrontier &DF, + ETForest &ET, DominanceFrontier &DF, const TargetData &TD, AliasSetTracker *AST) { // If there is nothing to do, bail out... if (Allocas.empty()) return; SmallVector RetryList; - PromoteMem2Reg(Allocas, RetryList, DT, DF, TD, AST).run(); + PromoteMem2Reg(Allocas, RetryList, ET, DF, TD, AST).run(); // PromoteMem2Reg may not have been able to promote all of the allocas in one // pass, run it again if needed. @@ -830,7 +829,7 @@ void llvm::PromoteMemToReg(const std::vector &Allocas, NewAllocas.assign(RetryList.begin(), RetryList.end()); RetryList.clear(); - PromoteMem2Reg(NewAllocas, RetryList, DT, DF, TD, AST).run(); + PromoteMem2Reg(NewAllocas, RetryList, ET, DF, TD, AST).run(); NewAllocas.clear(); } }