[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

Devang Patel dpatel at apple.com
Fri Dec 8 15:11:58 PST 2006



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");






More information about the llvm-commits mailing list