Handle "noinline" note inside the simple inliner.
authorDevang Patel <dpatel@apple.com>
Wed, 3 Sep 2008 18:10:21 +0000 (18:10 +0000)
committerDevang Patel <dpatel@apple.com>
Wed, 3 Sep 2008 18:10:21 +0000 (18:10 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@55708 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/IPO/InlineSimple.cpp
lib/Transforms/IPO/Inliner.cpp

index 63a4798cce1dc933cc00b5fdcd1188bb4eea8b78..4171e22302d3b09bb7eb4f2bece3e650c5242f23 100644 (file)
@@ -63,6 +63,11 @@ bool SimpleInliner::doInitialization(CallGraph &CG) {
   
   Module &M = CG.getModule();
   
+  for (Module::iterator I = M.begin(), E = M.end();
+       I != E; ++I)
+    if (!I->isDeclaration() && I->getNotes() == FN_NOTE_NoInline)
+      NeverInline.insert(I);
+
   // Get llvm.noinline
   GlobalVariable *GV = M.getNamedGlobal("llvm.noinline");
   
index 845ffd864e3f05813f2d4460d872c69c26c66d18..3ea16208a520d2a904080ab42143ca9a6930a782 100644 (file)
@@ -144,10 +144,8 @@ bool Inliner::runOnSCC(const std::vector<CallGraphNode*> &SCC) {
         bool AlwaysInline = false;
         if (Fn && (Fn->getNotes() & FN_NOTE_AlwaysInline))
           AlwaysInline = true;
-        if (Fn && (Fn->getNotes() & FN_NOTE_NoInline))
-          DOUT << "NOT Inlining: inline=never is set" << *CS.getInstruction();
-        else if (!AlwaysInline 
-                 && InlineCost >= (int)(InlineThreshold * FudgeFactor)) {
+        if (!AlwaysInline 
+            && InlineCost >= (int)(InlineThreshold * FudgeFactor)) {
           DOUT << "    NOT Inlining: cost=" << InlineCost
                << ", Call: " << *CS.getInstruction();
         } else {