diff options
author | Devang Patel <dpatel@apple.com> | 2008-09-03 18:47:45 +0000 |
---|---|---|
committer | Devang Patel <dpatel@apple.com> | 2008-09-03 18:47:45 +0000 |
commit | 67243399dd7427c4f530a8c8cc73dfcfd4788f73 (patch) | |
tree | 19a28e7acfd4df20c796da49b4b2e8d107f20b5e | |
parent | 5e060104628b5a5779fc910f6e2d5a15771fa15b (diff) | |
download | external_llvm-67243399dd7427c4f530a8c8cc73dfcfd4788f73.zip external_llvm-67243399dd7427c4f530a8c8cc73dfcfd4788f73.tar.gz external_llvm-67243399dd7427c4f530a8c8cc73dfcfd4788f73.tar.bz2 |
Handle "always inline" note during inline cost analysis.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@55712 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Transforms/IPO/Inliner.cpp | 7 | ||||
-rw-r--r-- | lib/Transforms/Utils/InlineCost.cpp | 3 |
2 files changed, 4 insertions, 6 deletions
diff --git a/lib/Transforms/IPO/Inliner.cpp b/lib/Transforms/IPO/Inliner.cpp index 3ea1620..1c3d5a8 100644 --- a/lib/Transforms/IPO/Inliner.cpp +++ b/lib/Transforms/IPO/Inliner.cpp @@ -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 { diff --git a/lib/Transforms/Utils/InlineCost.cpp b/lib/Transforms/Utils/InlineCost.cpp index 5c97fd2..2eaec06 100644 --- a/lib/Transforms/Utils/InlineCost.cpp +++ b/lib/Transforms/Utils/InlineCost.cpp @@ -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 |