[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