Changes in directory llvm/lib/VMCore:
PassManager.cpp updated: 1.116 -> 1.117 --- Log message: Start using PMStack. Now each pass is responsibe for assinging a pass manager for itself. There is some opportunity to remove some dead code from PassManager.cpp. --- Diffs of the changes: (+24 -29) PassManager.cpp | 53 ++++++++++++++++++++++++----------------------------- 1 files changed, 24 insertions(+), 29 deletions(-) Index: llvm/lib/VMCore/PassManager.cpp diff -u llvm/lib/VMCore/PassManager.cpp:1.116 llvm/lib/VMCore/PassManager.cpp:1.117 --- llvm/lib/VMCore/PassManager.cpp:1.116 Thu Jan 11 13:59:06 2007 +++ llvm/lib/VMCore/PassManager.cpp Thu Jan 11 16:15:30 2007 @@ -24,6 +24,7 @@ using namespace llvm; class llvm::PMDataManager; +class llvm::PMStack; //===----------------------------------------------------------------------===// // Overview: @@ -190,6 +191,9 @@ void initializeAllAnalysisInfo(); + // Active Pass Managers + PMStack activeStack; + protected: /// Collection of pass managers @@ -434,9 +438,8 @@ // /// FunctionPassManagerImpl manages FPPassManagers class FunctionPassManagerImpl : public Pass, - public PMDataManager, - public PMTopLevelManager { - + public PMDataManager, + public PMTopLevelManager { public: FunctionPassManagerImpl(int Depth) : PMDataManager(Depth) { @@ -551,8 +554,8 @@ // /// PassManagerImpl manages MPPassManagers class PassManagerImpl : public Pass, - public PMDataManager, - public PMTopLevelManager { + public PMDataManager, + public PMTopLevelManager { public: @@ -1218,19 +1221,15 @@ /// manage it. bool FunctionPassManagerImpl::addPass(Pass *P) { - if (!activeManager || !activeManager->addPass(P)) { - activeManager = new FPPassManager(getDepth() + 1); - // Inherit top level manager - activeManager->setTopLevelManager(this->getTopLevelManager()); - - // This top level manager is going to manage activeManager. - // Set up analysis resolver to connect them. - AnalysisResolver *AR = new AnalysisResolver(*this); - activeManager->setResolver(AR); - - addPassManager(activeManager); - return activeManager->addPass(P); + if (activeStack.empty()) { + FPPassManager *FPP = new FPPassManager(getDepth() + 1); + FPP->setTopLevelManager(this->getTopLevelManager()); + addPassManager(FPP); + activeStack.push(FPP); } + + P->assignPassManager(activeStack); + return true; } @@ -1525,21 +1524,16 @@ /// manage it. bool PassManagerImpl::addPass(Pass *P) { - if (!activeManager || !activeManager->addPass(P)) { - activeManager = new MPPassManager(getDepth() + 1); - - // Inherit top level manager - activeManager->setTopLevelManager(this->getTopLevelManager()); + if (activeStack.empty()) { + MPPassManager *MPP = new MPPassManager(getDepth() + 1); + MPP->setTopLevelManager(this->getTopLevelManager()); + addPassManager(MPP); + activeStack.push(MPP); + } - // This top level manager is going to manage activeManager. - // Set up analysis resolver to connect them. - AnalysisResolver *AR = new AnalysisResolver(*this); - activeManager->setResolver(AR); + P->assignPassManager(activeStack); - addPassManager(activeManager); - return activeManager->addPass(P); - } return true; } @@ -1618,6 +1612,7 @@ //===----------------------------------------------------------------------===// // PMStack implementation // + // Pop Pass Manager from the stack and clear its analysis info. void PMStack::pop() { _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits