Set AnalysisResolver for the passes when they are inserted into
authorDevang Patel <dpatel@apple.com>
Fri, 8 Dec 2006 23:53:00 +0000 (23:53 +0000)
committerDevang Patel <dpatel@apple.com>
Fri, 8 Dec 2006 23:53:00 +0000 (23:53 +0000)
pass manager queuer.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32385 91177308-0d34-0410-b5e6-96231b3b80d8

lib/VMCore/PassManager.cpp

index 3fd2103007addf718b423db2da1c40ab87ae0242..082491322283bf193c5bf7bcbbda3b2c50970217 100644 (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);
   }