summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEaswaran Raman <eraman@google.com>2017-09-13 20:16:02 +0000
committerEaswaran Raman <eraman@google.com>2017-09-13 20:16:02 +0000
commit7f44c36d0722680aaaf12d6c9ebd714f4b6a4312 (patch)
tree90aa0c134da3066baa038d5f9a4554b2c2715e1f
parentfb0da33fc13ab1533bcd46ec4f6d9f7c2cbd4372 (diff)
[Inliner] Add another way to compute full inline cost.
Summary: Full inline cost is computed when -inline-cost-full is true or ORE is non-null. This patch adds another way to compute full inline cost by adding a field to InlineParams. This will be used by SampleProfileLoader to check legality of inlining a callee that it wants to inline. Reviewers: danielcdh, haicheng Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D37819 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@313185 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/llvm/Analysis/InlineCost.h3
-rw-r--r--lib/Analysis/InlineCost.cpp10
2 files changed, 8 insertions, 5 deletions
diff --git a/include/llvm/Analysis/InlineCost.h b/include/llvm/Analysis/InlineCost.h
index 4b5f31316aa..de7247cb64a 100644
--- a/include/llvm/Analysis/InlineCost.h
+++ b/include/llvm/Analysis/InlineCost.h
@@ -152,6 +152,9 @@ struct InlineParams {
/// Threshold to use when the callsite is considered cold.
Optional<int> ColdCallSiteThreshold;
+
+ /// Compute inline cost even when the cost has exceeded the threshold.
+ Optional<bool> ComputeFullInlineCost;
};
/// Generate the parameters to tune the inline cost analysis based only on the
diff --git a/lib/Analysis/InlineCost.cpp b/lib/Analysis/InlineCost.cpp
index 8cdf2046702..416298b51b7 100644
--- a/lib/Analysis/InlineCost.cpp
+++ b/lib/Analysis/InlineCost.cpp
@@ -82,7 +82,7 @@ static cl::opt<int> HotCallSiteRelFreq(
"entry frequency, for a callsite to be hot in the absence of "
"profile information."));
-static cl::opt<bool> ComputeFullInlineCost(
+static cl::opt<bool> OptComputeFullInlineCost(
"inline-cost-full", cl::Hidden, cl::init(false),
cl::desc("Compute the full inline cost of a call site even when the cost "
"exceeds the threshold."));
@@ -124,6 +124,7 @@ class CallAnalyzer : public InstVisitor<CallAnalyzer, bool> {
int Threshold;
int Cost;
+ bool ComputeFullInlineCost;
bool IsCallerRecursive;
bool IsRecursiveCall;
@@ -256,7 +257,9 @@ public:
: TTI(TTI), GetAssumptionCache(GetAssumptionCache), GetBFI(GetBFI),
PSI(PSI), F(Callee), DL(F.getParent()->getDataLayout()), ORE(ORE),
CandidateCS(CSArg), Params(Params), Threshold(Params.DefaultThreshold),
- Cost(0), IsCallerRecursive(false), IsRecursiveCall(false),
+ Cost(0), ComputeFullInlineCost(OptComputeFullInlineCost ||
+ Params.ComputeFullInlineCost || ORE),
+ IsCallerRecursive(false), IsRecursiveCall(false),
ExposesReturnsTwice(false), HasDynamicAlloca(false),
ContainsNoDuplicateCall(false), HasReturn(false), HasIndirectBr(false),
HasFrameEscape(false), AllocatedSize(0), NumInstructions(0),
@@ -1722,9 +1725,6 @@ InlineCost llvm::getInlineCost(
CS.isNoInline())
return llvm::InlineCost::getNever();
- if (ORE)
- ComputeFullInlineCost = true;
-
DEBUG(llvm::dbgs() << " Analyzing call of " << Callee->getName()
<< "... (caller:" << Caller->getName() << ")\n");