While adding pass into the manager, process Analysis only if it is
authorDevang Patel <dpatel@apple.com>
Sat, 11 Nov 2006 02:04:19 +0000 (02:04 +0000)
committerDevang Patel <dpatel@apple.com>
Sat, 11 Nov 2006 02:04:19 +0000 (02:04 +0000)
required to do so.

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

lib/VMCore/PassManager.cpp

index c6130d8f5563babc41482e5a27834c199f9012d4..d4be3edd44494bd68a5e7560e62fde5c2ad11da3 100644 (file)
@@ -48,8 +48,8 @@ public:
   void removeDeadPasses() { /* TODO : Implement */ }
 
   /// Add pass P into the PassVector. Update RequiredAnalysis and
-  /// AvailableAnalysis appropriately
-  void addPassToManager (Pass *P);
+  /// AvailableAnalysis appropriately if ProcessAnalysis is true.
+  void addPassToManager (Pass *P, bool ProcessAnalysis = true);
 
   inline std::vector<Pass *>::iterator passVectorBegin() { 
     return PassVector.begin(); 
@@ -248,18 +248,21 @@ void CommonPassManagerImpl::removeNotPreservedAnalysis(Pass *P) {
 }
 
 /// Add pass P into the PassVector. Update RequiredAnalysis and
-/// AvailableAnalysis appropriately
-void CommonPassManagerImpl::addPassToManager (Pass *P) {
+/// AvailableAnalysis appropriately if ProcessAnalysis is true.
+void CommonPassManagerImpl::addPassToManager (Pass *P, 
+                                              bool ProcessAnalysis) {
 
-  // Take a note of analysis required and made available by this pass
-  noteDownRequiredAnalysis(P);
-  noteDownAvailableAnalysis(P);
+  if (ProcessAnalysis) {
+    // Take a note of analysis required and made available by this pass
+    noteDownRequiredAnalysis(P);
+    noteDownAvailableAnalysis(P);
+
+    // Remove the analysis not preserved by this pass
+    removeNotPreservedAnalysis(P);
+  }
 
   // Add pass
   PassVector.push_back(P);
-
-  // Remove the analysis not preserved by this pass
-  removeNotPreservedAnalysis(P);
 }
 
 /// BasicBlockPassManager implementation
@@ -341,7 +344,7 @@ FunctionPassManagerImpl_New::addPass(Pass *P) {
         || !activeBBPassManager->addPass(BP)) {
 
       activeBBPassManager = new BasicBlockPassManager_New();
-      addPassToManager(activeBBPassManager);
+      addPassToManager(activeBBPassManager, false);
       if (!activeBBPassManager->addPass(BP))
         assert(0 && "Unable to add Pass");
     }
@@ -397,7 +400,7 @@ ModulePassManager_New::addPass(Pass *P) {
         || !activeFunctionPassManager->addPass(P)) {
 
       activeFunctionPassManager = new FunctionPassManagerImpl_New();
-      addPassToManager(activeFunctionPassManager);
+      addPassToManager(activeFunctionPassManager, false);
       if (!activeFunctionPassManager->addPass(FP))
         assert(0 && "Unable to add pass");
     }