diff options
author | Pedro Artigas <partigas@apple.com> | 2012-11-29 17:47:05 +0000 |
---|---|---|
committer | Pedro Artigas <partigas@apple.com> | 2012-11-29 17:47:05 +0000 |
commit | 6eda0813459547fe8094dd5d31f7dd2214b5ca7a (patch) | |
tree | f05390ab9a1da2f03cbe8195d4e4c49968c43091 /lib/VMCore | |
parent | 6a144e40b059735cd8e701f382680fc1725954bf (diff) | |
download | external_llvm-6eda0813459547fe8094dd5d31f7dd2214b5ca7a.zip external_llvm-6eda0813459547fe8094dd5d31f7dd2214b5ca7a.tar.gz external_llvm-6eda0813459547fe8094dd5d31f7dd2214b5ca7a.tar.bz2 |
One more step towards making doInitialization and doFinalization useful for
start up and clean up module passes, now that ASAN and TSAN are fixed the
tests pass
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@168905 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/VMCore')
-rw-r--r-- | lib/VMCore/PassManager.cpp | 72 |
1 files changed, 14 insertions, 58 deletions
diff --git a/lib/VMCore/PassManager.cpp b/lib/VMCore/PassManager.cpp index 3a8a9e2..1142392 100644 --- a/lib/VMCore/PassManager.cpp +++ b/lib/VMCore/PassManager.cpp @@ -1528,12 +1528,12 @@ bool FPPassManager::runOnFunction(Function &F) { } bool FPPassManager::runOnModule(Module &M) { - bool Changed = doInitialization(M); + bool Changed = false; for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I) Changed |= runOnFunction(*I); - return doFinalization(M) || Changed; + return Changed; } bool FPPassManager::doInitialization(Module &M) { @@ -1541,16 +1541,16 @@ bool FPPassManager::doInitialization(Module &M) { for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index) Changed |= getContainedPass(Index)->doInitialization(M); - + return Changed; } bool FPPassManager::doFinalization(Module &M) { bool Changed = false; - + for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index) Changed |= getContainedPass(Index)->doFinalization(M); - + return Changed; } @@ -1572,6 +1572,10 @@ MPPassManager::runOnModule(Module &M) { Changed |= FPP->doInitialization(M); } + // Initialize module passes + for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index) + Changed |= getContainedPass(Index)->doInitialization(M); + for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index) { ModulePass *MP = getContainedPass(Index); bool LocalChanged = false; @@ -1600,6 +1604,10 @@ MPPassManager::runOnModule(Module &M) { removeDeadPasses(MP, M.getModuleIdentifier(), ON_MODULE_MSG); } + // Finalize module passes + for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index) + Changed |= getContainedPass(Index)->doFinalization(M); + // Finalize on-the-fly passes for (std::map<Pass *, FunctionPassManagerImpl *>::iterator I = OnTheFlyManagers.begin(), E = OnTheFlyManagers.end(); @@ -1610,29 +1618,7 @@ MPPassManager::runOnModule(Module &M) { FPP->releaseMemoryOnTheFly(); Changed |= FPP->doFinalization(M); } - - return Changed; -} - -/// Run all of the initializers for the module passes. -/// -bool MPPassManager::doInitialization() { - 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() { - bool Changed = false; - - for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index) - Changed |= getContainedPass(Index)->doFinalization(); - + return Changed; } @@ -1692,24 +1678,6 @@ Pass* MPPassManager::getOnTheFlyPass(Pass *MP, AnalysisID PI, Function &F){ //===----------------------------------------------------------------------===// // PassManagerImpl implementation -bool PassManagerImpl::doInitialization() { - bool Changed = false; - - for (unsigned Index = 0; Index < getNumContainedManagers(); ++Index) - Changed |= getContainedManager(Index)->doInitialization(); - - return Changed; -} - -bool PassManagerImpl::doFinalization() { - 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. @@ -1754,18 +1722,6 @@ 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 |