[llvm-commits] [llvm] r55673 - in /llvm/trunk: lib/Transforms/IPO/Inliner.cpp test/Transforms/Inline/2008-09-02-AlwaysInline.ll test/Transforms/Inline/2008-09-02-NoInline.ll

Devang Patel dpatel at apple.com
Tue Sep 2 15:16:13 PDT 2008


Author: dpatel
Date: Tue Sep  2 17:16:13 2008
New Revision: 55673

URL: http://llvm.org/viewvc/llvm-project?rev=55673&view=rev
Log:
respect inline=never and inline=always notes.

Added:
    llvm/trunk/test/Transforms/Inline/2008-09-02-AlwaysInline.ll
    llvm/trunk/test/Transforms/Inline/2008-09-02-NoInline.ll
Modified:
    llvm/trunk/lib/Transforms/IPO/Inliner.cpp

Modified: llvm/trunk/lib/Transforms/IPO/Inliner.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/Inliner.cpp?rev=55673&r1=55672&r2=55673&view=diff

==============================================================================
--- llvm/trunk/lib/Transforms/IPO/Inliner.cpp (original)
+++ llvm/trunk/lib/Transforms/IPO/Inliner.cpp Tue Sep  2 17:16:13 2008
@@ -140,7 +140,14 @@
         int InlineCost = getInlineCost(CS);
         float FudgeFactor = getInlineFudgeFactor(CS);
 
-        if (InlineCost >= (int)(InlineThreshold * FudgeFactor)) {
+        Function *Fn = CS.getCalledFunction();
+        bool AlwaysInline = false;
+        if (Fn && (Fn->getNotes() & FP_AlwaysInline))
+          AlwaysInline = true;
+        if (Fn && (Fn->getNotes() & FP_NoInline))
+          DOUT << "NOT Inlining: inline=never is set" << *CS.getInstruction();
+        else if (!AlwaysInline 
+                 && InlineCost >= (int)(InlineThreshold * FudgeFactor)) {
           DOUT << "    NOT Inlining: cost=" << InlineCost
                << ", Call: " << *CS.getInstruction();
         } else {

Added: llvm/trunk/test/Transforms/Inline/2008-09-02-AlwaysInline.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/Inline/2008-09-02-AlwaysInline.ll?rev=55673&view=auto

==============================================================================
--- llvm/trunk/test/Transforms/Inline/2008-09-02-AlwaysInline.ll (added)
+++ llvm/trunk/test/Transforms/Inline/2008-09-02-AlwaysInline.ll Tue Sep  2 17:16:13 2008
@@ -0,0 +1,10 @@
+; RUN: llvm-as < %s | opt  -inline-threshold=0 -inline | llvm-dis | not grep call 
+
+define i32 @fn2() notes(inline=always) {
+  ret i32 1
+}
+
+define i32 @fn3() {
+   %r = call i32 @fn2()
+   ret i32 %r
+}

Added: llvm/trunk/test/Transforms/Inline/2008-09-02-NoInline.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/Inline/2008-09-02-NoInline.ll?rev=55673&view=auto

==============================================================================
--- llvm/trunk/test/Transforms/Inline/2008-09-02-NoInline.ll (added)
+++ llvm/trunk/test/Transforms/Inline/2008-09-02-NoInline.ll Tue Sep  2 17:16:13 2008
@@ -0,0 +1,10 @@
+; RUN: llvm-as < %s | opt -inline | llvm-dis | grep call | count 1
+
+define i32 @fn2() notes(inline=never) {
+  ret i32 1
+}
+
+define i32 @fn3() {
+   %r = call i32 @fn2()
+   ret i32 %r
+}





More information about the llvm-commits mailing list