summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDevang Patel <dpatel@apple.com>2007-01-11 22:15:30 +0000
committerDevang Patel <dpatel@apple.com>2007-01-11 22:15:30 +0000
commitad98d23f16b5893ba9d9d3704888064dff287fce (patch)
treee7cd7c6f3d0f99db99c901e689b4ed44dc2a092f
parent582db976d8183341e2cace32d54dd313e144fe1a (diff)
downloadbcm5719-llvm-ad98d23f16b5893ba9d9d3704888064dff287fce.tar.gz
bcm5719-llvm-ad98d23f16b5893ba9d9d3704888064dff287fce.zip
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. llvm-svn: 33087
-rw-r--r--llvm/lib/VMCore/PassManager.cpp51
1 files changed, 23 insertions, 28 deletions
diff --git a/llvm/lib/VMCore/PassManager.cpp b/llvm/lib/VMCore/PassManager.cpp
index d71192689af..c2351eda1e0 100644
--- a/llvm/lib/VMCore/PassManager.cpp
+++ b/llvm/lib/VMCore/PassManager.cpp
@@ -24,6 +24,7 @@
using namespace llvm;
class llvm::PMDataManager;
+class llvm::PMStack;
//===----------------------------------------------------------------------===//
// Overview:
@@ -190,6 +191,9 @@ public:
void initializeAllAnalysisInfo();
+ // Active Pass Managers
+ PMStack activeStack;
+
protected:
/// Collection of pass managers
@@ -434,9 +438,8 @@ private:
//
/// 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 @@ private:
//
/// PassManagerImpl manages MPPassManagers
class PassManagerImpl : public Pass,
- public PMDataManager,
- public PMTopLevelManager {
+ public PMDataManager,
+ public PMTopLevelManager {
public:
@@ -1218,19 +1221,15 @@ bool FunctionPassManager::doFinalization() {
/// 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());
+ if (activeStack.empty()) {
+ FPPassManager *FPP = new FPPassManager(getDepth() + 1);
+ FPP->setTopLevelManager(this->getTopLevelManager());
+ addPassManager(FPP);
+ activeStack.push(FPP);
+ }
- // 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;
}
@@ -1525,21 +1524,16 @@ MPPassManager::runOnModule(Module &M) {
/// 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 @@ void TimingInfo::createTheTimeInfo() {
//===----------------------------------------------------------------------===//
// PMStack implementation
//
+
// Pop Pass Manager from the stack and clear its analysis info.
void PMStack::pop() {
OpenPOWER on IntegriCloud