Add InlineCost class for represent the estimated cost of inlining a
function.
- This explicitly models the costs for functions which should
"always" or "never" be inlined. This fixes bugs where such costs
were not previously respected.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@58450 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Transforms/IPO/Inliner.cpp b/lib/Transforms/IPO/Inliner.cpp
index 74af183..2321047 100644
--- a/lib/Transforms/IPO/Inliner.cpp
+++ b/lib/Transforms/IPO/Inliner.cpp
@@ -76,9 +76,22 @@
/// shouldInline - Return true if the inliner should attempt to inline
/// at the given CallSite.
bool Inliner::shouldInline(CallSite CS) {
- int Cost = getInlineCost(CS);
+ InlineCost IC = getInlineCost(CS);
float FudgeFactor = getInlineFudgeFactor(CS);
+ if (IC.isAlways()) {
+ DOUT << " Inlining: cost=always"
+ << ", Call: " << *CS.getInstruction();
+ return true;
+ }
+
+ if (IC.isNever()) {
+ DOUT << " NOT Inlining: cost=never"
+ << ", Call: " << *CS.getInstruction();
+ return false;
+ }
+
+ int Cost = IC.getValue();
int CurrentThreshold = InlineThreshold;
Function *Fn = CS.getCaller();
if (Fn && !Fn->isDeclaration()