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; } _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits