[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