summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/IPO/SampleProfile.cpp
diff options
context:
space:
mode:
authorDehao Chen <dehao@google.com>2016-09-19 18:38:14 +0000
committerDehao Chen <dehao@google.com>2016-09-19 18:38:14 +0000
commit20866ed57e7e6b8e93290a1baee36839f06c4222 (patch)
tree9bd82924575f5179759be543b7ca0f1bb90c945a /llvm/lib/Transforms/IPO/SampleProfile.cpp
parent552d012b7e2de4b1163f449b406e8beb691577e1 (diff)
downloadbcm5719-llvm-20866ed57e7e6b8e93290a1baee36839f06c4222.tar.gz
bcm5719-llvm-20866ed57e7e6b8e93290a1baee36839f06c4222.zip
Handle early inline for hot callsites that reside in the same basic block.
Summary: Callsites in the same basic block should share the same hotness. This patch checks for the hottest callsite in the same basic block, and use the hotness for all callsites in that basic block for early inline decisions. It also fixes the test to add "-S" so theat the "CHECK-NOT" is actually checking the content. Reviewers: dnovillo Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D24734 llvm-svn: 281927
Diffstat (limited to 'llvm/lib/Transforms/IPO/SampleProfile.cpp')
-rw-r--r--llvm/lib/Transforms/IPO/SampleProfile.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/llvm/lib/Transforms/IPO/SampleProfile.cpp b/llvm/lib/Transforms/IPO/SampleProfile.cpp
index ad806addf6c..0594063f0c7 100644
--- a/llvm/lib/Transforms/IPO/SampleProfile.cpp
+++ b/llvm/lib/Transforms/IPO/SampleProfile.cpp
@@ -638,15 +638,20 @@ bool SampleProfileLoader::inlineHotFunctions(Function &F) {
bool LocalChanged = false;
SmallVector<Instruction *, 10> CIS;
for (auto &BB : F) {
+ bool Hot = false;
+ SmallVector<Instruction *, 10> Candidates;
for (auto &I : BB.getInstList()) {
const FunctionSamples *FS = nullptr;
if ((isa<CallInst>(I) || isa<InvokeInst>(I)) &&
(FS = findCalleeFunctionSamples(I))) {
-
+ Candidates.push_back(&I);
if (callsiteIsHot(Samples, FS))
- CIS.push_back(&I);
+ Hot = true;
}
}
+ if (Hot) {
+ CIS.insert(CIS.begin(), Candidates.begin(), Candidates.end());
+ }
}
for (auto I : CIS) {
InlineFunctionInfo IFI(nullptr, ACT ? &GetAssumptionCache : nullptr);
OpenPOWER on IntegriCloud