diff options
author | Dehao Chen <dehao@google.com> | 2016-09-19 18:38:14 +0000 |
---|---|---|
committer | Dehao Chen <dehao@google.com> | 2016-09-19 18:38:14 +0000 |
commit | 20866ed57e7e6b8e93290a1baee36839f06c4222 (patch) | |
tree | 9bd82924575f5179759be543b7ca0f1bb90c945a /llvm/lib/Transforms/IPO/SampleProfile.cpp | |
parent | 552d012b7e2de4b1163f449b406e8beb691577e1 (diff) | |
download | bcm5719-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.cpp | 9 |
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); |