diff options
author | Owen Anderson <resistor@mac.com> | 2012-11-15 00:14:15 +0000 |
---|---|---|
committer | Owen Anderson <resistor@mac.com> | 2012-11-15 00:14:15 +0000 |
commit | 1aa2751260a9df6c57aceefcefded89b20dbb39c (patch) | |
tree | 3e76c74ff88937eadd916be1a5b2f10cedf07f7a /llvm/lib/VMCore/PassManager.cpp | |
parent | a4ca19694eb28497e6d358cababfe2ab2966003e (diff) | |
download | bcm5719-llvm-1aa2751260a9df6c57aceefcefded89b20dbb39c.tar.gz bcm5719-llvm-1aa2751260a9df6c57aceefcefded89b20dbb39c.zip |
Add doInitialization and doFinalization methods to ModulePass's, to allow them to be re-initialized and reused on multiple Module's.
Patch by Pedro Artigas.
llvm-svn: 168008
Diffstat (limited to 'llvm/lib/VMCore/PassManager.cpp')
-rw-r--r-- | llvm/lib/VMCore/PassManager.cpp | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/llvm/lib/VMCore/PassManager.cpp b/llvm/lib/VMCore/PassManager.cpp index 53f11499e4b..b70a27e3c04 100644 --- a/llvm/lib/VMCore/PassManager.cpp +++ b/llvm/lib/VMCore/PassManager.cpp @@ -309,6 +309,14 @@ public: /// whether any of the passes modifies the module, and if so, return true. bool runOnModule(Module &M); + /// doInitialization - Run all of the initializers for the module passes. + /// + bool doInitialization(void); + + /// doFinalization - Run all of the finalizers for the module passes. + /// + bool doFinalization(void); + /// Pass Manager itself does not invalidate any analysis info. void getAnalysisUsage(AnalysisUsage &Info) const { Info.setPreservesAll(); @@ -394,6 +402,14 @@ public: /// whether any of the passes modifies the module, and if so, return true. bool run(Module &M); + /// doInitialization - Run all of the initializers for the module passes. + /// + bool doInitialization(void); + + /// doFinalization - Run all of the finalizers for the module passes. + /// + bool doFinalization(void); + /// Pass Manager itself does not invalidate any analysis info. void getAnalysisUsage(AnalysisUsage &Info) const { Info.setPreservesAll(); @@ -1594,6 +1610,29 @@ MPPassManager::runOnModule(Module &M) { FPP->releaseMemoryOnTheFly(); Changed |= FPP->doFinalization(M); } + + return Changed; +} + +/// Run all of the initializers for the module passes. +/// +bool MPPassManager::doInitialization(void) { + bool Changed = false; + + for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index) + Changed |= getContainedPass(Index)->doInitialization(); + + return Changed; +} + +/// Run all of the finalizers for the module passes. +/// +bool MPPassManager::doFinalization(void) { + bool Changed = false; + + for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index) + Changed |= getContainedPass(Index)->doFinalization(); + return Changed; } @@ -1640,6 +1679,25 @@ Pass* MPPassManager::getOnTheFlyPass(Pass *MP, AnalysisID PI, Function &F){ //===----------------------------------------------------------------------===// // PassManagerImpl implementation + +bool PassManagerImpl::doInitialization(void) { + bool Changed = false; + + for (unsigned Index = 0; Index < getNumContainedManagers(); ++Index) + Changed |= getContainedManager(Index)->doInitialization(); + + return Changed; +} + +bool PassManagerImpl::doFinalization(void) { + bool Changed = false; + + for (unsigned Index = 0; Index < getNumContainedManagers(); ++Index) + Changed |= getContainedManager(Index)->doFinalization(); + + return Changed; +} + // /// run - Execute all of the passes scheduled for execution. Keep track of /// whether any of the passes modifies the module, and if so, return true. @@ -1684,6 +1742,18 @@ bool PassManager::run(Module &M) { return PM->run(M); } +/// doInitialization - Run all of the initializers for the module passes. +/// +bool PassManager::doInitialization() { + return PM->doInitialization(); +} + +/// doFinalization - Run all of the finalizers for the module passes. +/// +bool PassManager::doFinalization() { + return PM->doFinalization(); +} + //===----------------------------------------------------------------------===// // TimingInfo Class - This class is used to calculate information about the // amount of time each pass takes to execute. This only happens with |