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

Devang Patel dpatel at apple.com
Mon Nov 13 19:05:24 PST 2006



Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.26 -> 1.27
---
Log message:

Implement removeDeadPasses().


---
Diffs of the changes:  (+23 -4)

 PassManager.cpp |   27 +++++++++++++++++++++++----
 1 files changed, 23 insertions(+), 4 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.26 llvm/lib/VMCore/PassManager.cpp:1.27
--- llvm/lib/VMCore/PassManager.cpp:1.26	Mon Nov 13 20:54:23 2006
+++ llvm/lib/VMCore/PassManager.cpp	Mon Nov 13 21:05:08 2006
@@ -53,7 +53,7 @@
   void removeNotPreservedAnalysis(Pass *P);
   
   /// Remove dead passes
-  void removeDeadPasses() { /* TODO : Implement */ }
+  void removeDeadPasses(Pass *P);
 
   /// Add pass P into the PassVector. Update RequiredAnalysis and
   /// AvailableAnalysis appropriately if ProcessAnalysis is true.
@@ -292,6 +292,25 @@
   }
 }
 
+/// Remove analysis passes that are not used any longer
+void CommonPassManagerImpl::removeDeadPasses(Pass *P) {
+
+  for (std::map<Pass *, Pass *>::iterator I = LastUser.begin(),
+         E = LastUser.end(); I !=E; ++I) {
+    if (I->second == P) {
+      Pass *deadPass = I->first;
+      deadPass->releaseMemory();
+
+      std::map<AnalysisID, Pass*>::iterator Pos = 
+        AvailableAnalysis.find(deadPass->getPassInfo());
+      
+      assert (Pos != AvailableAnalysis.end() &&
+              "Pass is not available");
+      AvailableAnalysis.erase(Pos);
+    }
+  }
+}
+
 /// Add pass P into the PassVector. Update RequiredAnalysis and
 /// AvailableAnalysis appropriately if ProcessAnalysis is true.
 void CommonPassManagerImpl::addPassToManager (Pass *P, 
@@ -349,7 +368,7 @@
       BasicBlockPass *BP = dynamic_cast<BasicBlockPass*>(P);
       Changed |= BP->runOnBasicBlock(*I);
       removeNotPreservedAnalysis(P);
-      removeDeadPasses();
+      removeDeadPasses(P);
     }
   return Changed;
 }
@@ -439,7 +458,7 @@
       FunctionPass *FP = dynamic_cast<FunctionPass*>(P);
       Changed |= FP->runOnFunction(*I);
       removeNotPreservedAnalysis(P);
-      removeDeadPasses();
+      removeDeadPasses(P);
     }
   return Changed;
 }
@@ -514,7 +533,7 @@
     ModulePass *MP = dynamic_cast<ModulePass*>(P);
     Changed |= MP->runOnModule(M);
     removeNotPreservedAnalysis(P);
-    removeDeadPasses();
+    removeDeadPasses(P);
   }
   return Changed;
 }






More information about the llvm-commits mailing list