[llvm] r203669 - Move duplicated code into a helper function (exposed through overload).

Eric Christopher echristo at gmail.com
Wed Mar 12 09:41:06 PDT 2014


You seem to have dropped the comments here...

-eric

On Wed, Mar 12, 2014 at 9:12 AM, Eli Bendersky <eliben at google.com> wrote:
> Author: eliben
> Date: Wed Mar 12 11:12:36 2014
> New Revision: 203669
>
> URL: http://llvm.org/viewvc/llvm-project?rev=203669&view=rev
> Log:
> Move duplicated code into a helper function (exposed through overload).
>
> There's a bit of duplicated "magic" code in opt.cpp and Clang's CodeGen that
> computes the inliner threshold from opt level and size opt level.
>
> This patch moves the code to a function that lives alongside the inliner itself,
> providing a convenient overload to the inliner creation.
>
> A separate patch can be committed to Clang to use this once it's committed to
> LLVM. Standalone tools that use the inlining pass can also avoid duplicating
> this code and fearing it will go out of sync.
>
> Note: this patch also restructures the conditinal logic of the computation to
> be cleaner.
>
>
> Modified:
>     llvm/trunk/include/llvm/Transforms/IPO.h
>     llvm/trunk/lib/Transforms/IPO/InlineSimple.cpp
>     llvm/trunk/tools/opt/opt.cpp
>
> Modified: llvm/trunk/include/llvm/Transforms/IPO.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Transforms/IPO.h?rev=203669&r1=203668&r2=203669&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Transforms/IPO.h (original)
> +++ llvm/trunk/include/llvm/Transforms/IPO.h Wed Mar 12 11:12:36 2014
> @@ -34,7 +34,7 @@ ModulePass *createStripSymbolsPass(bool
>
>  //===----------------------------------------------------------------------===//
>  //
> -// These functions strips symbols from functions and modules.
> +// These functions strips symbols from functions and modules.
>  // Only debugging information is not stripped.
>  //
>  ModulePass *createStripNonDebugSymbolsPass();
> @@ -78,20 +78,24 @@ ModulePass *createGlobalDCEPass();
>  /// the specified global values. Otherwise, it deletes as much of the module as
>  /// possible, except for the global values specified.
>  ///
> -ModulePass *createGVExtractionPass(std::vector<GlobalValue*>& GVs, bool
> +ModulePass *createGVExtractionPass(std::vector<GlobalValue*>& GVs, bool
>                                     deleteFn = false);
>
>  //===----------------------------------------------------------------------===//
>  /// createFunctionInliningPass - Return a new pass object that uses a heuristic
>  /// to inline direct function calls to small functions.
>  ///
> +/// The Threshold can be passed directly, or asked to be computed from the
> +/// given optimization and size optimization arguments.
> +///
>  /// The -inline-threshold command line option takes precedence over the
>  /// threshold given here.
>  Pass *createFunctionInliningPass();
>  Pass *createFunctionInliningPass(int Threshold);
> +Pass *createFunctionInliningPass(unsigned OptLevel, unsigned SizeOptLevel);
>
>  //===----------------------------------------------------------------------===//
> -/// createAlwaysInlinerPass - Return a new pass object that inlines only
> +/// createAlwaysInlinerPass - Return a new pass object that inlines only
>  /// functions that are marked as "always_inline".
>  Pass *createAlwaysInlinerPass();
>  Pass *createAlwaysInlinerPass(bool InsertLifetime);
> @@ -192,7 +196,7 @@ ModulePass *createMergeFunctionsPass();
>  /// createPartialInliningPass - This pass inlines parts of functions.
>  ///
>  ModulePass *createPartialInliningPass();
> -
> +
>  //===----------------------------------------------------------------------===//
>  // createMetaRenamerPass - Rename everything with metasyntatic names.
>  //
>
> Modified: llvm/trunk/lib/Transforms/IPO/InlineSimple.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/InlineSimple.cpp?rev=203669&r1=203668&r2=203669&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Transforms/IPO/InlineSimple.cpp (original)
> +++ llvm/trunk/lib/Transforms/IPO/InlineSimple.cpp Wed Mar 12 11:12:36 2014
> @@ -56,6 +56,17 @@ public:
>    void getAnalysisUsage(AnalysisUsage &AU) const override;
>  };
>
> +static int computeThresholdFromOptLevels(unsigned OptLevel,
> +                                         unsigned SizeOptLevel) {
> +  if (OptLevel > 2)
> +    return 275;
> +  if (SizeOptLevel == 1)
> +    return 75;
> +  if (SizeOptLevel == 2)
> +    return 25;
> +  return 225;
> +}
> +
>  } // end anonymous namespace
>
>  char SimpleInliner::ID = 0;
> @@ -72,6 +83,12 @@ Pass *llvm::createFunctionInliningPass(i
>    return new SimpleInliner(Threshold);
>  }
>
> +Pass *llvm::createFunctionInliningPass(unsigned OptLevel,
> +                                       unsigned SizeOptLevel) {
> +  return new SimpleInliner(
> +      computeThresholdFromOptLevels(OptLevel, SizeOptLevel));
> +}
> +
>  bool SimpleInliner::runOnSCC(CallGraphSCC &SCC) {
>    ICA = &getAnalysis<InlineCostAnalysis>();
>    return Inliner::runOnSCC(SCC);
>
> Modified: llvm/trunk/tools/opt/opt.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/opt/opt.cpp?rev=203669&r1=203668&r2=203669&view=diff
> ==============================================================================
> --- llvm/trunk/tools/opt/opt.cpp (original)
> +++ llvm/trunk/tools/opt/opt.cpp Wed Mar 12 11:12:36 2014
> @@ -210,14 +210,7 @@ static void AddOptimizationPasses(PassMa
>    if (DisableInline) {
>      // No inlining pass
>    } else if (OptLevel > 1) {
> -    unsigned Threshold = 225;
> -    if (SizeLevel == 1)      // -Os
> -      Threshold = 75;
> -    else if (SizeLevel == 2) // -Oz
> -      Threshold = 25;
> -    if (OptLevel > 2)
> -      Threshold = 275;
> -    Builder.Inliner = createFunctionInliningPass(Threshold);
> +    Builder.Inliner = createFunctionInliningPass(OptLevel, SizeLevel);
>    } else {
>      Builder.Inliner = createAlwaysInlinerPass();
>    }
>
>
> _______________________________________________
> 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