[llvm] r270153 - Allow -inline-threshold to override default threshold.

Easwaran Raman via llvm-commits llvm-commits at lists.llvm.org
Thu May 19 16:02:09 PDT 2016


Author: eraman
Date: Thu May 19 18:02:09 2016
New Revision: 270153

URL: http://llvm.org/viewvc/llvm-project?rev=270153&view=rev
Log:
Allow -inline-threshold to override default threshold.

Before r257832, the threshold used by SimpleInliner was explicitly specified or generated from opt levels and passed to the base class Inliner's constructor. There, it was first overridden by explicitly specified -inline-threshold. The refactoring in r257832 did not preserve this behavior for all opt levels. This change brings back the original behavior.

Differential Revision: http://reviews.llvm.org/D20452


Added:
    llvm/trunk/test/Transforms/Inline/inline-threshold.ll
Modified:
    llvm/trunk/lib/Analysis/InlineCost.cpp

Modified: llvm/trunk/lib/Analysis/InlineCost.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/InlineCost.cpp?rev=270153&r1=270152&r2=270153&view=diff
==============================================================================
--- llvm/trunk/lib/Analysis/InlineCost.cpp (original)
+++ llvm/trunk/lib/Analysis/InlineCost.cpp Thu May 19 18:02:09 2016
@@ -612,11 +612,14 @@ void CallAnalyzer::updateThreshold(CallS
     return;
   }
 
-  // If -inline-threshold is not given, listen to the optsize and minsize
-  // attributes when they would decrease the threshold.
   Function *Caller = CS.getCaller();
-
-  if (!(DefaultInlineThreshold.getNumOccurrences() > 0)) {
+  if (DefaultInlineThreshold.getNumOccurrences() > 0) {
+    // Explicitly specified -inline-threhold overrides the threshold passed to
+    // CallAnalyzer's constructor.
+    Threshold = DefaultInlineThreshold;
+  } else {
+    // If -inline-threshold is not given, listen to the optsize and minsize
+    // attributes when they would decrease the threshold.
     if (Caller->optForMinSize() && OptMinSizeThreshold < Threshold)
       Threshold = OptMinSizeThreshold;
     else if (Caller->optForSize() && OptSizeThreshold < Threshold)

Added: llvm/trunk/test/Transforms/Inline/inline-threshold.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/Inline/inline-threshold.ll?rev=270153&view=auto
==============================================================================
--- llvm/trunk/test/Transforms/Inline/inline-threshold.ll (added)
+++ llvm/trunk/test/Transforms/Inline/inline-threshold.ll Thu May 19 18:02:09 2016
@@ -0,0 +1,89 @@
+; Test that -inline-threshold overrides thresholds derived from opt levels.
+; RUN: opt < %s -O2 -inline-threshold=500 -S  | FileCheck %s
+; RUN: opt < %s -O3 -inline-threshold=500 -S  | FileCheck %s
+; RUN: opt < %s -Os -inline-threshold=500 -S  | FileCheck %s
+; RUN: opt < %s -Oz -inline-threshold=500 -S  | FileCheck %s
+
+ at a = global i32 4
+
+define i32 @simpleFunction(i32 %a) #0 {
+entry:
+  %a1 = load volatile i32, i32* @a
+  %x1 = add i32 %a1,  %a1
+  %cmp = icmp eq i32 %a1, 0
+  br i1 %cmp, label %if.then, label %if.else
+if.then:
+  %a2 = load volatile i32, i32* @a
+  %x2_0 = add i32 %x1, %a2
+  br label %if.else
+if.else:
+  %x2 = phi i32 [ %x1, %entry ], [ %x2_0, %if.then ]
+  %a3 = load volatile i32, i32* @a
+  %x3 = add i32 %x2, %a3
+  %a4 = load volatile i32, i32* @a
+  %x4 = add i32 %x3, %a4
+  %a5 = load volatile i32, i32* @a
+  %x5 = add i32 %x4, %a5
+  %a6 = load volatile i32, i32* @a
+  %x6 = add i32 %x5, %a6
+  %a7 = load volatile i32, i32* @a
+  %x7 = add i32 %x6, %a7
+  %a8 = load volatile i32, i32* @a
+  %x8 = add i32 %x7, %a8
+  %a9 = load volatile i32, i32* @a
+  %x9 = add i32 %x8, %a9
+  %a10 = load volatile i32, i32* @a
+  %x10 = add i32 %x9, %a10
+  %a11 = load volatile i32, i32* @a
+  %x11 = add i32 %x10, %a11
+  %a12 = load volatile i32, i32* @a
+  %x12 = add i32 %x11, %a12
+  %a13 = load volatile i32, i32* @a
+  %x13 = add i32 %x12, %a13
+  %a14 = load volatile i32, i32* @a
+  %x14 = add i32 %x13, %a14
+  %a15 = load volatile i32, i32* @a
+  %x15 = add i32 %x14, %a15
+  %a16 = load volatile i32, i32* @a
+  %x16 = add i32 %x15, %a16
+  %a17 = load volatile i32, i32* @a
+  %x17 = add i32 %x16, %a17
+  %a18 = load volatile i32, i32* @a
+  %x18 = add i32 %x17, %a18
+  %a19 = load volatile i32, i32* @a
+  %x19 = add i32 %x18, %a19
+  %a20 = load volatile i32, i32* @a
+  %x20 = add i32 %x19, %a20
+  %a21 = load volatile i32, i32* @a
+  %x21 = add i32 %x20, %a21
+  %a22 = load volatile i32, i32* @a
+  %x22 = add i32 %x21, %a22
+  %a23 = load volatile i32, i32* @a
+  %x23 = add i32 %x22, %a23
+  %a24 = load volatile i32, i32* @a
+  %x24 = add i32 %x23, %a24
+  %a25 = load volatile i32, i32* @a
+  %x25 = add i32 %x24, %a25
+  %a26 = load volatile i32, i32* @a
+  %x26 = add i32 %x25, %a26
+  %a27 = load volatile i32, i32* @a
+  %x27 = add i32 %x26, %a27
+  %a28 = load volatile i32, i32* @a
+  %x28 = add i32 %x27, %a28
+  %a29 = load volatile i32, i32* @a
+  %x29 = add i32 %x28, %a29
+  %add = add i32 %x29, %a
+  ret i32 %add
+}
+
+; Function Attrs: nounwind readnone uwtable
+define i32 @bar(i32 %a) #0 {
+; CHECK-LABEL: @bar
+; CHECK-NOT: call i32 @simpleFunction(i32 6)
+; CHECK: ret
+entry:
+  %i = tail call i32 @simpleFunction(i32 6)
+  ret i32 %i
+}
+
+attributes #0 = { nounwind readnone uwtable }




More information about the llvm-commits mailing list