diff --git a/lib/VMCore/PassManager.cpp b/lib/VMCore/PassManager.cpp index 375f0fff255..8cf4a159642 100644 --- a/lib/VMCore/PassManager.cpp +++ b/lib/VMCore/PassManager.cpp @@ -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 DeadPasses; + TPM->collectLastUses(DeadPasses, P); + + for (std::vector::iterator I = DeadPasses.begin(), + E = DeadPasses.end(); I != E; ++I) { + (*I)->releaseMemory(); + + std::map::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