mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-27 14:45:24 +00:00
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 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281927 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d809745696
commit
ddeacc711a
@ -638,15 +638,20 @@ bool SampleProfileLoader::inlineHotFunctions(Function &F) {
|
|||||||
bool LocalChanged = false;
|
bool LocalChanged = false;
|
||||||
SmallVector<Instruction *, 10> CIS;
|
SmallVector<Instruction *, 10> CIS;
|
||||||
for (auto &BB : F) {
|
for (auto &BB : F) {
|
||||||
|
bool Hot = false;
|
||||||
|
SmallVector<Instruction *, 10> Candidates;
|
||||||
for (auto &I : BB.getInstList()) {
|
for (auto &I : BB.getInstList()) {
|
||||||
const FunctionSamples *FS = nullptr;
|
const FunctionSamples *FS = nullptr;
|
||||||
if ((isa<CallInst>(I) || isa<InvokeInst>(I)) &&
|
if ((isa<CallInst>(I) || isa<InvokeInst>(I)) &&
|
||||||
(FS = findCalleeFunctionSamples(I))) {
|
(FS = findCalleeFunctionSamples(I))) {
|
||||||
|
Candidates.push_back(&I);
|
||||||
if (callsiteIsHot(Samples, FS))
|
if (callsiteIsHot(Samples, FS))
|
||||||
CIS.push_back(&I);
|
Hot = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (Hot) {
|
||||||
|
CIS.insert(CIS.begin(), Candidates.begin(), Candidates.end());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
for (auto I : CIS) {
|
for (auto I : CIS) {
|
||||||
InlineFunctionInfo IFI(nullptr, ACT ? &GetAssumptionCache : nullptr);
|
InlineFunctionInfo IFI(nullptr, ACT ? &GetAssumptionCache : nullptr);
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
_Z3foov:200:100
|
_Z3foov:200:100
|
||||||
1: _Z3barv:100
|
1: _Z3barv:0
|
||||||
3: _Z3barv:100
|
3: _Z3barv:100
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
; RUN: opt < %s -instcombine -sample-profile -sample-profile-file=%S/Inputs/einline.prof | FileCheck %s
|
; RUN: opt < %s -instcombine -sample-profile -sample-profile-file=%S/Inputs/einline.prof -S | FileCheck %s
|
||||||
|
|
||||||
; Checks if both call and invoke can be inlined early if their inlined
|
; Checks if both call and invoke can be inlined early if their inlined
|
||||||
; instances are hot in profile.
|
; instances are hot in profile.
|
||||||
|
Loading…
Reference in New Issue
Block a user