From d6b092bbd568c2df397b3edc5bbf484b37315cd5 Mon Sep 17 00:00:00 2001 From: Pedro Artigas Date: Thu, 29 Nov 2012 17:47:05 +0000 Subject: [PATCH] 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 llvm-svn: 168905 --- llvm/include/llvm/CodeGen/MachineModuleInfo.h | 3 ++ llvm/include/llvm/Pass.h | 4 +- llvm/include/llvm/PassManager.h | 8 --- llvm/lib/VMCore/PassManager.cpp | 72 ++++++--------------------- llvm/tools/bugpoint/CrashDebugger.cpp | 2 - llvm/tools/llc/llc.cpp | 2 - llvm/tools/llvm-extract/llvm-extract.cpp | 2 - llvm/tools/llvm-prof/llvm-prof.cpp | 2 - llvm/tools/llvm-stress/llvm-stress.cpp | 2 - llvm/tools/lto/LTOCodeGenerator.cpp | 4 -- llvm/tools/opt/opt.cpp | 2 - 11 files changed, 19 insertions(+), 84 deletions(-) diff --git a/llvm/include/llvm/CodeGen/MachineModuleInfo.h b/llvm/include/llvm/CodeGen/MachineModuleInfo.h index fc73a3d..4660cad 100644 --- a/llvm/include/llvm/CodeGen/MachineModuleInfo.h +++ b/llvm/include/llvm/CodeGen/MachineModuleInfo.h @@ -180,7 +180,10 @@ public: const MCObjectFileInfo *MOFI); ~MachineModuleInfo(); + using ModulePass::doInitialization; bool doInitialization(); + + using ModulePass::doFinalization; bool doFinalization(); /// EndFunction - Discard function meta information. diff --git a/llvm/include/llvm/Pass.h b/llvm/include/llvm/Pass.h index 29efb32..e92e31b1 100644 --- a/llvm/include/llvm/Pass.h +++ b/llvm/include/llvm/Pass.h @@ -230,7 +230,7 @@ public: /// doInitialization - Virtual method overridden by subclasses to do /// any necessary initialization before any pass is run. /// - virtual bool doInitialization() { return false; } + virtual bool doInitialization(Module &) { return false; } /// runOnModule - Virtual method overriden by subclasses to process the module /// being operated on. @@ -239,7 +239,7 @@ public: /// doFinalization - Virtual method overriden by subclasses to do any /// necessary clean up after all passes have run. /// - virtual bool doFinalization() { return false; } + virtual bool doFinalization(Module &) { return false; } virtual void assignPassManager(PMStack &PMS, PassManagerType T); diff --git a/llvm/include/llvm/PassManager.h b/llvm/include/llvm/PassManager.h index 1d5e800..ce5fda7 100644 --- a/llvm/include/llvm/PassManager.h +++ b/llvm/include/llvm/PassManager.h @@ -58,14 +58,6 @@ 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(); - - /// doFinalization - Run all of the finalizers for the module passes. - /// - bool doFinalization(); - private: /// PassManagerImpl_New is the actual class. PassManager is just the /// wraper to publish simple pass manager interface diff --git a/llvm/lib/VMCore/PassManager.cpp b/llvm/lib/VMCore/PassManager.cpp index 3a8a9e2..1142392 100644 --- a/llvm/lib/VMCore/PassManager.cpp +++ b/llvm/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::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 diff --git a/llvm/tools/bugpoint/CrashDebugger.cpp b/llvm/tools/bugpoint/CrashDebugger.cpp index 8836eed..aed16f4 100644 --- a/llvm/tools/bugpoint/CrashDebugger.cpp +++ b/llvm/tools/bugpoint/CrashDebugger.cpp @@ -412,9 +412,7 @@ bool ReduceCrashingInstructions::TestInsts(std::vector // Verify that this is still valid. PassManager Passes; Passes.add(createVerifierPass()); - Passes.doInitialization(); Passes.run(*M); - Passes.doFinalization(); // Try running on the hacked up program... if (TestFn(BD, M)) { diff --git a/llvm/tools/llc/llc.cpp b/llvm/tools/llc/llc.cpp index f3e5c20..4d4a74c 100644 --- a/llvm/tools/llc/llc.cpp +++ b/llvm/tools/llc/llc.cpp @@ -359,9 +359,7 @@ int main(int argc, char **argv) { // Before executing passes, print the final values of the LLVM options. cl::PrintOptionValues(); - PM.doInitialization(); PM.run(*mod); - PM.doFinalization(); } // Declare success. diff --git a/llvm/tools/llvm-extract/llvm-extract.cpp b/llvm/tools/llvm-extract/llvm-extract.cpp index d2caabd..ac82d98 100644 --- a/llvm/tools/llvm-extract/llvm-extract.cpp +++ b/llvm/tools/llvm-extract/llvm-extract.cpp @@ -276,9 +276,7 @@ int main(int argc, char **argv) { else if (Force || !CheckBitcodeOutputToConsole(Out.os(), true)) Passes.add(createBitcodeWriterPass(Out.os())); - Passes.doInitialization(); Passes.run(*M.get()); - Passes.doFinalization(); // Declare success. Out.keep(); diff --git a/llvm/tools/llvm-prof/llvm-prof.cpp b/llvm/tools/llvm-prof/llvm-prof.cpp index 940ac34..81e9503 100644 --- a/llvm/tools/llvm-prof/llvm-prof.cpp +++ b/llvm/tools/llvm-prof/llvm-prof.cpp @@ -287,9 +287,7 @@ int main(int argc, char **argv) { PassManager PassMgr; PassMgr.add(createProfileLoaderPass(ProfileDataFile)); PassMgr.add(new ProfileInfoPrinterPass(PIL)); - PassMgr.doInitialization(); PassMgr.run(*M); - PassMgr.doFinalization(); return 0; } diff --git a/llvm/tools/llvm-stress/llvm-stress.cpp b/llvm/tools/llvm-stress/llvm-stress.cpp index 72fdac8..8473d94 100644 --- a/llvm/tools/llvm-stress/llvm-stress.cpp +++ b/llvm/tools/llvm-stress/llvm-stress.cpp @@ -713,9 +713,7 @@ int main(int argc, char **argv) { PassManager Passes; Passes.add(createVerifierPass()); Passes.add(createPrintModulePass(&Out->os())); - Passes.doInitialization(); Passes.run(*M.get()); - Passes.doFinalization(); Out->keep(); return 0; diff --git a/llvm/tools/lto/LTOCodeGenerator.cpp b/llvm/tools/lto/LTOCodeGenerator.cpp index d9fa218..b1c4f43 100644 --- a/llvm/tools/lto/LTOCodeGenerator.cpp +++ b/llvm/tools/lto/LTOCodeGenerator.cpp @@ -342,9 +342,7 @@ void LTOCodeGenerator::applyScopeRestrictions() { passes.add(createInternalizePass(mustPreserveList)); // apply scope restrictions - passes.doInitialization(); passes.run(*mergedModule); - passes.doFinalization(); _scopeRestrictionsDone = true; } @@ -399,9 +397,7 @@ bool LTOCodeGenerator::generateObjectFile(raw_ostream &out, } // Run our queue of passes all at once now, efficiently. - passes.doInitialization(); passes.run(*mergedModule); - passes.doFinalization(); // Run the code generator, and write assembly file codeGenPasses->doInitialization(); diff --git a/llvm/tools/opt/opt.cpp b/llvm/tools/opt/opt.cpp index 7cced98..bac0d46 100644 --- a/llvm/tools/opt/opt.cpp +++ b/llvm/tools/opt/opt.cpp @@ -820,9 +820,7 @@ int main(int argc, char **argv) { cl::PrintOptionValues(); // Now that we have all of the passes ready, run them. - Passes.doInitialization(); Passes.run(*M.get()); - Passes.doFinalization(); // Declare success. if (!NoOutput || PrintBreakpoints) -- 2.7.4