diff options
author | Easwaran Raman <eraman@google.com> | 2017-09-13 20:16:02 +0000 |
---|---|---|
committer | Easwaran Raman <eraman@google.com> | 2017-09-13 20:16:02 +0000 |
commit | 7f44c36d0722680aaaf12d6c9ebd714f4b6a4312 (patch) | |
tree | 90aa0c134da3066baa038d5f9a4554b2c2715e1f | |
parent | fb0da33fc13ab1533bcd46ec4f6d9f7c2cbd4372 (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.h | 3 | ||||
-rw-r--r-- | lib/Analysis/InlineCost.cpp | 10 |
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"); |