[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