[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