Handle "always inline" note during inline cost analysis.
authorDevang Patel <dpatel@apple.com>
Wed, 3 Sep 2008 18:47:45 +0000 (18:47 +0000)
committerDevang Patel <dpatel@apple.com>
Wed, 3 Sep 2008 18:47:45 +0000 (18:47 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@55712 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/IPO/Inliner.cpp
lib/Transforms/Utils/InlineCost.cpp

index 3ea16208a520d2a904080ab42143ca9a6930a782..1c3d5a81f36967a49c58398a2d0be62ae93a8f07 100644 (file)
@@ -140,12 +140,7 @@ bool Inliner::runOnSCC(const std::vector<CallGraphNode*> &SCC) {
         int InlineCost = getInlineCost(CS);
         float FudgeFactor = getInlineFudgeFactor(CS);
 
-        Function *Fn = CS.getCalledFunction();
-        bool AlwaysInline = false;
-        if (Fn && (Fn->getNotes() & FN_NOTE_AlwaysInline))
-          AlwaysInline = true;
-        if (!AlwaysInline 
-            && InlineCost >= (int)(InlineThreshold * FudgeFactor)) {
+        if (InlineCost >= (int)(InlineThreshold * FudgeFactor)) {
           DOUT << "    NOT Inlining: cost=" << InlineCost
                << ", Call: " << *CS.getInstruction();
         } else {
index 5c97fd2f70665a5469597d10eb9463ef219fa5c1..2eaec06b3530f2d468808df5f8f265a492e60d9b 100644 (file)
@@ -221,6 +221,9 @@ int InlineCostAnalyzer::getInlineCost(CallSite CS,
   // If we should never inline this, return a huge cost.
   if (CalleeFI.NeverInline)
     return 2000000000;
+
+  if (Callee->getNotes() & FN_NOTE_AlwaysInline)
+    return -2000000000;
     
   // Add to the inline quality for properties that make the call valuable to
   // inline.  This includes factors that indicate that the result of inlining