[llvm-commits] [llvm] r168008 - in /llvm/trunk: include/llvm/Pass.h include/llvm/PassManager.h include/llvm/PassManagers.h lib/Analysis/IPA/CallGraphSCCPass.cpp lib/VMCore/PassManager.cpp tools/bugpoint/CrashDebugger.cpp tools/llc/llc.cpp tools/llvm-extract/llvm-extract.cpp tools/llvm-prof/llvm-prof.cpp tools/llvm-stress/llvm-stress.cpp tools/lto/LTOCodeGenerator.cpp tools/opt/opt.cpp
Sean Silva
silvas at purdue.edu
Wed Nov 14 19:16:07 PST 2012
Docs? Surely <http://llvm.org/docs/WritingAnLLVMPass.html> needs to be updated.
-- Sean Silva
On Wed, Nov 14, 2012 at 7:14 PM, Owen Anderson <resistor at mac.com> wrote:
> Author: resistor
> Date: Wed Nov 14 18:14:15 2012
> New Revision: 168008
>
> URL: http://llvm.org/viewvc/llvm-project?rev=168008&view=rev
> Log:
> 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.
>
> Modified:
> llvm/trunk/include/llvm/Pass.h
> llvm/trunk/include/llvm/PassManager.h
> llvm/trunk/include/llvm/PassManagers.h
> llvm/trunk/lib/Analysis/IPA/CallGraphSCCPass.cpp
> llvm/trunk/lib/VMCore/PassManager.cpp
> llvm/trunk/tools/bugpoint/CrashDebugger.cpp
> llvm/trunk/tools/llc/llc.cpp
> llvm/trunk/tools/llvm-extract/llvm-extract.cpp
> llvm/trunk/tools/llvm-prof/llvm-prof.cpp
> llvm/trunk/tools/llvm-stress/llvm-stress.cpp
> llvm/trunk/tools/lto/LTOCodeGenerator.cpp
> llvm/trunk/tools/opt/opt.cpp
>
> Modified: llvm/trunk/include/llvm/Pass.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Pass.h?rev=168008&r1=168007&r2=168008&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Pass.h (original)
> +++ llvm/trunk/include/llvm/Pass.h Wed Nov 14 18:14:15 2012
> @@ -227,10 +227,20 @@
> /// createPrinterPass - Get a module printer pass.
> Pass *createPrinterPass(raw_ostream &O, const std::string &Banner) const;
>
> + /// doInitialization - Virtual method overridden by subclasses to do
> + /// any necessary initialization.
> + ///
> + virtual bool doInitialization(void) { return false; }
> +
> /// runOnModule - Virtual method overriden by subclasses to process the module
> /// being operated on.
> virtual bool runOnModule(Module &M) = 0;
>
> + /// doFinalization - Virtual method overriden by subclasses to do any post
> + /// processing needed after all passes have run.
> + ///
> + virtual bool doFinalization(void) { return false; }
> +
> virtual void assignPassManager(PMStack &PMS,
> PassManagerType T);
>
>
> Modified: llvm/trunk/include/llvm/PassManager.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/PassManager.h?rev=168008&r1=168007&r2=168008&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/PassManager.h (original)
> +++ llvm/trunk/include/llvm/PassManager.h Wed Nov 14 18:14:15 2012
> @@ -58,6 +58,14 @@
> /// 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
>
> Modified: llvm/trunk/include/llvm/PassManagers.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/PassManagers.h?rev=168008&r1=168007&r2=168008&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/PassManagers.h (original)
> +++ llvm/trunk/include/llvm/PassManagers.h Wed Nov 14 18:14:15 2012
> @@ -420,10 +420,20 @@
> /// cleanup - After running all passes, clean up pass manager cache.
> void cleanup();
>
> + /// doInitialization - Overrides ModulePass doInitialization for global
> + /// initialization tasks
> + ///
> + using ModulePass::doInitialization;
> +
> /// doInitialization - Run all of the initializers for the function passes.
> ///
> bool doInitialization(Module &M);
>
> + /// doFinalization - Overrides ModulePass doFinalization for global
> + /// finalization tasks
> + ///
> + using ModulePass::doFinalization;
> +
> /// doFinalization - Run all of the finalizers for the function passes.
> ///
> bool doFinalization(Module &M);
>
> Modified: llvm/trunk/lib/Analysis/IPA/CallGraphSCCPass.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/IPA/CallGraphSCCPass.cpp?rev=168008&r1=168007&r2=168008&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Analysis/IPA/CallGraphSCCPass.cpp (original)
> +++ llvm/trunk/lib/Analysis/IPA/CallGraphSCCPass.cpp Wed Nov 14 18:14:15 2012
> @@ -51,6 +51,9 @@
> /// whether any of the passes modifies the module, and if so, return true.
> bool runOnModule(Module &M);
>
> + using ModulePass::doInitialization;
> + using ModulePass::doFinalization;
> +
> bool doInitialization(CallGraph &CG);
> bool doFinalization(CallGraph &CG);
>
>
> Modified: llvm/trunk/lib/VMCore/PassManager.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/PassManager.cpp?rev=168008&r1=168007&r2=168008&view=diff
> ==============================================================================
> --- llvm/trunk/lib/VMCore/PassManager.cpp (original)
> +++ llvm/trunk/lib/VMCore/PassManager.cpp Wed Nov 14 18:14:15 2012
> @@ -309,6 +309,14 @@
> /// 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 @@
> /// 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 @@
> 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 @@
>
> //===----------------------------------------------------------------------===//
> // 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 @@
> 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
>
> Modified: llvm/trunk/tools/bugpoint/CrashDebugger.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/bugpoint/CrashDebugger.cpp?rev=168008&r1=168007&r2=168008&view=diff
> ==============================================================================
> --- llvm/trunk/tools/bugpoint/CrashDebugger.cpp (original)
> +++ llvm/trunk/tools/bugpoint/CrashDebugger.cpp Wed Nov 14 18:14:15 2012
> @@ -412,7 +412,9 @@
> // 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)) {
>
> Modified: llvm/trunk/tools/llc/llc.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llc/llc.cpp?rev=168008&r1=168007&r2=168008&view=diff
> ==============================================================================
> --- llvm/trunk/tools/llc/llc.cpp (original)
> +++ llvm/trunk/tools/llc/llc.cpp Wed Nov 14 18:14:15 2012
> @@ -359,7 +359,9 @@
> // Before executing passes, print the final values of the LLVM options.
> cl::PrintOptionValues();
>
> + PM.doInitialization();
> PM.run(*mod);
> + PM.doFinalization();
> }
>
> // Declare success.
>
> Modified: llvm/trunk/tools/llvm-extract/llvm-extract.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-extract/llvm-extract.cpp?rev=168008&r1=168007&r2=168008&view=diff
> ==============================================================================
> --- llvm/trunk/tools/llvm-extract/llvm-extract.cpp (original)
> +++ llvm/trunk/tools/llvm-extract/llvm-extract.cpp Wed Nov 14 18:14:15 2012
> @@ -276,7 +276,9 @@
> else if (Force || !CheckBitcodeOutputToConsole(Out.os(), true))
> Passes.add(createBitcodeWriterPass(Out.os()));
>
> + Passes.doInitialization();
> Passes.run(*M.get());
> + Passes.doFinalization();
>
> // Declare success.
> Out.keep();
>
> Modified: llvm/trunk/tools/llvm-prof/llvm-prof.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-prof/llvm-prof.cpp?rev=168008&r1=168007&r2=168008&view=diff
> ==============================================================================
> --- llvm/trunk/tools/llvm-prof/llvm-prof.cpp (original)
> +++ llvm/trunk/tools/llvm-prof/llvm-prof.cpp Wed Nov 14 18:14:15 2012
> @@ -287,7 +287,9 @@
> PassManager PassMgr;
> PassMgr.add(createProfileLoaderPass(ProfileDataFile));
> PassMgr.add(new ProfileInfoPrinterPass(PIL));
> + PassMgr.doInitialization();
> PassMgr.run(*M);
> + PassMgr.doFinalization();
>
> return 0;
> }
>
> Modified: llvm/trunk/tools/llvm-stress/llvm-stress.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-stress/llvm-stress.cpp?rev=168008&r1=168007&r2=168008&view=diff
> ==============================================================================
> --- llvm/trunk/tools/llvm-stress/llvm-stress.cpp (original)
> +++ llvm/trunk/tools/llvm-stress/llvm-stress.cpp Wed Nov 14 18:14:15 2012
> @@ -713,7 +713,9 @@
> PassManager Passes;
> Passes.add(createVerifierPass());
> Passes.add(createPrintModulePass(&Out->os()));
> + Passes.doInitialization();
> Passes.run(*M.get());
> + Passes.doFinalization();
> Out->keep();
>
> return 0;
>
> Modified: llvm/trunk/tools/lto/LTOCodeGenerator.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lto/LTOCodeGenerator.cpp?rev=168008&r1=168007&r2=168008&view=diff
> ==============================================================================
> --- llvm/trunk/tools/lto/LTOCodeGenerator.cpp (original)
> +++ llvm/trunk/tools/lto/LTOCodeGenerator.cpp Wed Nov 14 18:14:15 2012
> @@ -342,7 +342,9 @@
> passes.add(createInternalizePass(mustPreserveList));
>
> // apply scope restrictions
> + passes.doInitialization();
> passes.run(*mergedModule);
> + passes.doFinalization();
>
> _scopeRestrictionsDone = true;
> }
> @@ -397,7 +399,9 @@
> }
>
> // 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();
>
> Modified: llvm/trunk/tools/opt/opt.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/opt/opt.cpp?rev=168008&r1=168007&r2=168008&view=diff
> ==============================================================================
> --- llvm/trunk/tools/opt/opt.cpp (original)
> +++ llvm/trunk/tools/opt/opt.cpp Wed Nov 14 18:14:15 2012
> @@ -820,7 +820,9 @@
> 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)
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list