aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDevang Patel <dpatel@apple.com>2007-01-16 21:43:18 +0000
committerDevang Patel <dpatel@apple.com>2007-01-16 21:43:18 +0000
commit9d133e150faac44b8d8d1b53516cbad4d9bbf84a (patch)
tree6fa94a69167cc3832eb1bf69d626988ca03f79c8
parentb93a7c9b66017c77dd954d67772e55600ccd5d57 (diff)
Undo last check-in.
Remove setupPassManager() and its use. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33270 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/llvm/Pass.h11
-rw-r--r--lib/VMCore/PassManager.cpp112
2 files changed, 52 insertions, 71 deletions
diff --git a/include/llvm/Pass.h b/include/llvm/Pass.h
index fcdc66fcba..9951a988bf 100644
--- a/include/llvm/Pass.h
+++ b/include/llvm/Pass.h
@@ -108,8 +108,6 @@ public:
void dump() const; // dump - call print(std::cerr, 0);
virtual void assignPassManager(PMStack &PMS) {}
- virtual void setupPassManager(PMStack &PMS) {}
-
// Access AnalysisResolver
inline void setResolver(AnalysisResolver *AR) { Resolver = AR; }
inline AnalysisResolver *getResolver() { return Resolver; }
@@ -203,7 +201,6 @@ public:
virtual bool runPass(BasicBlock&) { return false; }
virtual void assignPassManager(PMStack &PMS);
-
// Force out-of-line virtual method.
virtual ~ModulePass();
};
@@ -270,7 +267,6 @@ public:
bool run(Function &F);
virtual void assignPassManager(PMStack &PMS);
- virtual void setupPassManager(PMStack &PMS);
};
@@ -325,7 +321,6 @@ public:
virtual bool runPass(BasicBlock &BB);
virtual void assignPassManager(PMStack &PMS);
- virtual void setupPassManager(PMStack &PMS);
};
/// Different types of internal pass managers. External pass managers
@@ -342,10 +337,8 @@ enum PassManagerType {
/// PMStack
/// Top level pass manager (see PasManager.cpp) maintains active Pass Managers
-/// using PMStack. Each Pass implements setupPassManager() and
-/// assignPassManager() to connect itself with appropriate manager.
-/// setupPassManager() creates new pass manager if required before adding
-/// required analysis passes. assignPassManager() walks PMStack to find
+/// using PMStack. Each Pass implements assignPassManager() to connect itself
+/// with appropriate manager. assignPassManager() walks PMStack to find
/// suitable manager.
///
/// PMStack is just a wrapper around standard deque that overrides pop() and
diff --git a/lib/VMCore/PassManager.cpp b/lib/VMCore/PassManager.cpp
index 50364e9c71..1e3b48ee68 100644
--- a/lib/VMCore/PassManager.cpp
+++ b/lib/VMCore/PassManager.cpp
@@ -366,7 +366,8 @@ void PMTopLevelManager::collectLastUses(std::vector<Pass *> &LastUses,
/// the manager. Remove dead passes. This is a recursive function.
void PMTopLevelManager::schedulePass(Pass *P) {
- P->setupPassManager(activeStack);
+ // TODO : Allocate function manager for this pass, other wise required set
+ // may be inserted into previous function manager
AnalysisUsage AnUsage;
P->getAnalysisUsage(AnUsage);
@@ -1217,55 +1218,47 @@ void ModulePass::assignPassManager(PMStack &PMS) {
MPP->add(this);
}
-/// Setup Pass Manager in advance before checking availability of
-/// required analysis passes.
-void FunctionPass::setupPassManager(PMStack &PMS) {
+/// Find appropriate Function Pass Manager or Call Graph Pass Manager
+/// in the PM Stack and add self into that manager.
+void FunctionPass::assignPassManager(PMStack &PMS) {
// Find Module Pass Manager (TODO : Or Call Graph Pass Manager)
while(!PMS.empty()) {
if (PMS.top()->getPassManagerType() > PMT_FunctionPassManager)
PMS.pop();
else
- break;
+ break;
}
+ FPPassManager *FPP = dynamic_cast<FPPassManager *>(PMS.top());
- assert(!PMS.empty() && "Unable to create Function Pass Manager");
+ // Create new Function Pass Manager
+ if (!FPP) {
+ assert(!PMS.empty() && "Unable to create Function Pass Manager");
+ PMDataManager *PMD = PMS.top();
- if (PMS.top()->getPassManagerType() == PMT_FunctionPassManager
- || PMS.top()->getPassManagerType() == PMT_CallGraphPassManager)
- return;
-
- PMDataManager *PMD = PMS.top();
-
- // [1] Create new Function Pass Manager
- FPPassManager *FPP = new FPPassManager(PMD->getDepth() + 1);
-
- // [2] Set up new manager's top level manager
- PMTopLevelManager *TPM = PMD->getTopLevelManager();
- TPM->addIndirectPassManager(FPP);
-
- // [3] Assign manager to manage this new manager. This may create
- // and push new managers into PMS
- Pass *P = dynamic_cast<Pass *>(FPP);
- P->assignPassManager(PMS);
-
- // [4] Push new manager into PMS
- PMS.push(FPP);
-}
+ // [1] Create new Function Pass Manager
+ FPP = new FPPassManager(PMD->getDepth() + 1);
-/// Find appropriate Function Pass Manager or Call Graph Pass Manager
-/// in the PM Stack and add self into that manager.
-void FunctionPass::assignPassManager(PMStack &PMS) {
+ // [2] Set up new manager's top level manager
+ PMTopLevelManager *TPM = PMD->getTopLevelManager();
+ TPM->addIndirectPassManager(FPP);
- PMDataManager *PMD = dynamic_cast<PMDataManager *>(PMS.top());
- assert(PMD && "Unable to assign Pass Manager");
+ // [3] Assign manager to manage this new manager. This may create
+ // and push new managers into PMS
+ Pass *P = dynamic_cast<Pass *>(FPP);
+ P->assignPassManager(PMS);
+
+ // [4] Push new manager into PMS
+ PMS.push(FPP);
+ }
- PMD->add(this);
+ // Assign FPP as the manager of this pass.
+ FPP->add(this);
}
-/// Setup Pass Manager in advance before checking availability of
-/// required analysis passes.
-void BasicBlockPass::setupPassManager(PMStack &PMS) {
+/// Find appropriate Basic Pass Manager or Call Graph Pass Manager
+/// in the PM Stack and add self into that manager.
+void BasicBlockPass::assignPassManager(PMStack &PMS) {
BBPassManager *BBP = NULL;
@@ -1275,37 +1268,32 @@ void BasicBlockPass::setupPassManager(PMStack &PMS) {
BBP = dynamic_cast<BBPassManager *>(PMS.top());
}
- if (BBP)
- return;
+ // If leaf manager is not Basic Block Pass manager then create new
+ // basic Block Pass manager.
+
+ if (!BBP) {
+ assert(!PMS.empty() && "Unable to create BasicBlock Pass Manager");
+ PMDataManager *PMD = PMS.top();
+
+ // [1] Create new Basic Block Manager
+ BBP = new BBPassManager(PMD->getDepth() + 1);
+
+ // [2] Set up new manager's top level manager
+ // Basic Block Pass Manager does not live by itself
+ PMTopLevelManager *TPM = PMD->getTopLevelManager();
+ TPM->addIndirectPassManager(BBP);
- assert(!PMS.empty() && "Unable to create BasicBlock Pass Manager");
- PMDataManager *PMD = PMS.top();
-
- // [1] Create new Basic Block Manager
- BBP = new BBPassManager(PMD->getDepth() + 1);
-
- // [2] Set up new manager's top level manager
- // Basic Block Pass Manager does not live by itself
- PMTopLevelManager *TPM = PMD->getTopLevelManager();
- TPM->addIndirectPassManager(BBP);
-
// [3] Assign manager to manage this new manager. This may create
// and push new managers into PMS
- Pass *P = dynamic_cast<Pass *>(BBP);
- P->assignPassManager(PMS);
-
- // [4] Push new manager into PMS
- PMS.push(BBP);
-}
-
-/// Find appropriate Basic Pass Manager or Call Graph Pass Manager
-/// in the PM Stack and add self into that manager.
-void BasicBlockPass::assignPassManager(PMStack &PMS) {
+ Pass *P = dynamic_cast<Pass *>(BBP);
+ P->assignPassManager(PMS);
- PMDataManager *PMD = dynamic_cast<PMDataManager *>(PMS.top());
- assert(PMD && "Unable to assign Pass Manager");
+ // [4] Push new manager into PMS
+ PMS.push(BBP);
+ }
- PMD->add(this);
+ // Assign BBP as the manager of this pass.
+ BBP->add(this);
}