diff options
author | Devang Patel <dpatel@apple.com> | 2006-12-08 23:11:43 +0000 |
---|---|---|
committer | Devang Patel <dpatel@apple.com> | 2006-12-08 23:11:43 +0000 |
commit | 591b1b7526ed9c099de23cc995853a250c20502f (patch) | |
tree | b41ef3e63169ae8bbdfb6bebba26cb69a29e3007 /lib/VMCore/PassManager.cpp | |
parent | c475692c5ee2f9c0c6988b7ec28768ef6690bfb0 (diff) |
Keep track of other pass managers, that are not directly managed by
top level manager. Use this info to findAnalysisPass.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32382 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/VMCore/PassManager.cpp')
-rw-r--r-- | lib/VMCore/PassManager.cpp | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/lib/VMCore/PassManager.cpp b/lib/VMCore/PassManager.cpp index 3207ef2a3f..25e8cbff42 100644 --- a/lib/VMCore/PassManager.cpp +++ b/lib/VMCore/PassManager.cpp @@ -141,11 +141,21 @@ public: PassManagers.push_back(Manager); } + // Add Manager into the list of managers that are not directly + // maintained by this top level pass manager + void addOtherPassManager(Pass *Manager) { + OtherPassManagers.push_back(Manager); + } + private: /// Collection of pass managers std::vector<Pass *> PassManagers; + /// Collection of pass managers that are not directly maintained + /// by this pass manager + std::vector<Pass *> OtherPassManagers; + // Map to keep track of last user of the analysis pass. // LastUser->second is the last user of Lastuser->first. std::map<Pass *, Pass *> LastUser; @@ -231,14 +241,16 @@ Pass *PMTopLevelManager::findAnalysisPass(AnalysisID AID) { } } - if (P) - return P; - - // Check pass managers; + // Check pass managers for (std::vector<Pass *>::iterator I = PassManagers.begin(), E = PassManagers.end(); P == NULL && I != E; ++I) P = NULL; // FIXME: (*I)->findAnalysisPass(AID, false /* Search downward */); + // Check other pass managers + for (std::vector<Pass *>::iterator I = OtherPassManagers.begin(), + E = OtherPassManagers.end(); P == NULL && I != E; ++I) + P = NULL; // FIXME: (*I)->findAnalysisPass(AID, false /* Search downward */); + return P; } @@ -839,6 +851,7 @@ FunctionPassManagerImpl_New::addPass(Pass *P) { activeBBPassManager = new BasicBlockPassManager_New(getDepth() + 1); addPassToManager(activeBBPassManager, false); + TPM->addOtherPassManager(activeBBPassManager); // Add pass into new manager. This time it must succeed. if (!activeBBPassManager->addPass(BP)) @@ -970,7 +983,8 @@ ModulePassManager_New::addPass(Pass *P) { activeFunctionPassManager = new FunctionPassManagerImpl_New(getDepth() + 1); addPassToManager(activeFunctionPassManager, false); - + TPM->addOtherPassManager(activeFunctionPassManager); + // Add pass into new manager. This time it must succeed. if (!activeFunctionPassManager->addPass(FP)) assert(0 && "Unable to add pass"); |