diff options
author | Devang Patel <dpatel@apple.com> | 2006-12-08 23:53:00 +0000 |
---|---|---|
committer | Devang Patel <dpatel@apple.com> | 2006-12-08 23:53:00 +0000 |
commit | 145e83dc12a3f962b999f348474ebb07a36a7b81 (patch) | |
tree | 21c86aaf200a19edc7c88f5020a657a1dd191172 | |
parent | 186bf2bc548f6e30ad5d11c52e0dc715598c248e (diff) |
Set AnalysisResolver for the passes when they are inserted into
pass manager queuer.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32385 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/VMCore/PassManager.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/lib/VMCore/PassManager.cpp b/lib/VMCore/PassManager.cpp index 3fd2103007..0824913222 100644 --- a/lib/VMCore/PassManager.cpp +++ b/lib/VMCore/PassManager.cpp @@ -393,6 +393,15 @@ public: ~FunctionPassManagerImpl_New() { /* TODO */ }; inline void addTopLevelPass(Pass *P) { + + if (dynamic_cast<ImmutablePass *> (P)) { + + // P is a immutable pass then it will be managed by this + // top level manager. Set up analysis resolver to connect them. + AnalysisResolver_New *AR = new AnalysisResolver_New(*this); + P->setResolver(AR); + } + addPass(P); } @@ -488,6 +497,15 @@ public: } inline void addTopLevelPass(Pass *P) { + + if (dynamic_cast<ImmutablePass *> (P)) { + + // P is a immutable pass and it will be managed by this + // top level manager. Set up analysis resolver to connect them. + AnalysisResolver_New *AR = new AnalysisResolver_New(*this); + P->setResolver(AR); + } + addPass(P); } @@ -577,6 +595,11 @@ void PMDataManager::removeDeadPasses(Pass *P) { void PMDataManager::addPassToManager(Pass *P, bool ProcessAnalysis) { + // This manager is going to manage pass P. Set up analysis resolver + // to connect them. + AnalysisResolver_New *AR = new AnalysisResolver_New(*this); + P->setResolver(AR); + if (ProcessAnalysis) { // At the moment, this pass is the last user of all required passes. @@ -1055,6 +1078,12 @@ bool PassManagerImpl_New::addPass(Pass *P) { if (!activeManager || !activeManager->addPass(P)) { activeManager = new ModulePassManager_New(getDepth() + 1); + + // This top level manager is going to manage activeManager. + // Set up analysis resolver to connect them. + AnalysisResolver_New *AR = new AnalysisResolver_New(*this); + activeManager->setResolver(AR); + addPassManager(activeManager); return activeManager->addPass(P); } |