Set AnalysisResolver for the passes when they are inserted into

pass manager queuer.

llvm-svn: 32385
This commit is contained in:
Devang Patel 2006-12-08 23:53:00 +00:00
parent 5fdac4070b
commit d440cd92a5
1 changed files with 29 additions and 0 deletions

View File

@ -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);
}