Changes in directory llvm/lib/VMCore:
PassManager.cpp updated: 1.68 -> 1.69 --- Log message: Keep track of other pass managers, that are not directly managed by top level manager. Use this info to findAnalysisPass. --- Diffs of the changes: (+19 -5) PassManager.cpp | 24 +++++++++++++++++++----- 1 files changed, 19 insertions(+), 5 deletions(-) Index: llvm/lib/VMCore/PassManager.cpp diff -u llvm/lib/VMCore/PassManager.cpp:1.68 llvm/lib/VMCore/PassManager.cpp:1.69 --- llvm/lib/VMCore/PassManager.cpp:1.68 Fri Dec 8 16:57:48 2006 +++ llvm/lib/VMCore/PassManager.cpp Fri Dec 8 17:11:43 2006 @@ -141,11 +141,21 @@ 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 @@ } } - 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 @@ 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 @@ 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"); _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits