[PATCH] D16493: Lower inlining threshold when the caller has minsize attribute

Eric Christopher via llvm-commits llvm-commits at lists.llvm.org
Sat Jan 23 08:15:53 PST 2016


LGTM.

On Fri, Jan 22, 2016, 4:56 PM Easwaran Raman via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> eraman created this revision.
> eraman added a reviewer: hfinkel.
> eraman added a subscriber: llvm-commits.
>
> When the caller has optsize attribute, we reduce the inlinining threshold
> to OptSizeThreshold (=75) if it is not already lower than that. We don't do
> the same for minsize and I suspect it was not intentional. This also
> addresses a FIXME regarding checking optsize attribute explicitly instead
> of using the right wrapper.
>
>
>
> http://reviews.llvm.org/D16493
>
> Files:
>   lib/Analysis/InlineCost.cpp
>   test/Transforms/Inline/inline-optsize.ll
>
> Index: test/Transforms/Inline/inline-optsize.ll
> ===================================================================
> --- test/Transforms/Inline/inline-optsize.ll
> +++ test/Transforms/Inline/inline-optsize.ll
> @@ -1,5 +1,6 @@
>  ; RUN: opt -S -Oz < %s | FileCheck %s -check-prefix=OZ
>  ; RUN: opt -S -O2 < %s | FileCheck %s -check-prefix=O2
> +; RUN: opt -S -Os < %s | FileCheck %s -check-prefix=OS
>
>  ; The inline threshold for a function with the optsize attribute is
> currently
>  ; the same as the global inline threshold for -Os. Check that the optsize
> @@ -24,10 +25,20 @@
>    ret i32 %x5
>  }
>
> -; @inner() should be inlined for -O2 but not for -Oz.
> +; @inner() should be inlined for -O2 and -Os but not for -Oz.
>  ; OZ: call
>  ; O2-NOT: call
> +; OS-NOT: call
>  define i32 @outer() optsize {
>     %r = call i32 @inner()
>     ret i32 %r
>  }
> +
> +; @inner() should not be inlined for -O2, -Os and -Oz.
> +; OZ: call
> +; O2: call
> +; OS: call
> +define i32 @outer2() minsize {
> +   %r = call i32 @inner()
> +   ret i32 %r
> +}
> Index: lib/Analysis/InlineCost.cpp
> ===================================================================
> --- lib/Analysis/InlineCost.cpp
> +++ lib/Analysis/InlineCost.cpp
> @@ -573,16 +573,16 @@
>  }
>
>  void CallAnalyzer::updateThreshold(CallSite CS, Function &Callee) {
> -  // If -inline-threshold is not given, listen to the optsize attribute
> when it
> -  // would decrease the threshold.
> +  // If -inline-threshold is not given, listen to the optsize and minsize
> +  // attributes when they would decrease the threshold.
>    Function *Caller = CS.getCaller();
>
> -  // FIXME: Use Function::optForSize()
> -  bool OptSize = Caller->hasFnAttribute(Attribute::OptimizeForSize);
> -
> -  if (!(DefaultInlineThreshold.getNumOccurrences() > 0) && OptSize &&
> -      OptSizeThreshold < Threshold)
> -    Threshold = OptSizeThreshold;
> +  if (!(DefaultInlineThreshold.getNumOccurrences() > 0)) {
> +    if (Caller->optForMinSize() && OptMinSizeThreshold < Threshold)
> +      Threshold = OptMinSizeThreshold;
> +    else if (Caller->optForSize() && OptSizeThreshold < Threshold)
> +      Threshold = OptSizeThreshold;
> +  }
>
>    // If profile information is available, use that to adjust threshold of
> hot
>    // and cold functions.
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160123/e539ec34/attachment.html>


More information about the llvm-commits mailing list