Reimplement removeDeadPasses().
authorDevang Patel <dpatel@apple.com>
Fri, 8 Dec 2006 00:37:52 +0000 (00:37 +0000)
committerDevang Patel <dpatel@apple.com>
Fri, 8 Dec 2006 00:37:52 +0000 (00:37 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32344 91177308-0d34-0410-b5e6-96231b3b80d8

lib/VMCore/PassManager.cpp

index 375f0fff2555b817cc4e5fa68b952fc3cad60c9a..8cf4a159642ee1561e47dcf2aff599a0751e1b17 100644 (file)
@@ -522,7 +522,21 @@ void PMDataManager::removeNotPreservedAnalysis(Pass *P) {
 
 /// Remove analysis passes that are not used any longer
 void PMDataManager::removeDeadPasses(Pass *P) {
-  // TODO : reimplement
+
+  std::vector<Pass *> DeadPasses;
+  TPM->collectLastUses(DeadPasses, P);
+
+  for (std::vector<Pass *>::iterator I = DeadPasses.begin(),
+         E = DeadPasses.end(); I != E; ++I) {
+    (*I)->releaseMemory();
+    
+    std::map<AnalysisID, Pass*>::iterator Pos = 
+      AvailableAnalysis.find((*I)->getPassInfo());
+    
+    // It is possible that deadPass is already removed from the AvailableAnalysis
+    if (Pos != AvailableAnalysis.end())
+      AvailableAnalysis.erase(Pos);
+  }
 }
 
 /// Add pass P into the PassVector. Update