mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-22 10:16:43 +00:00
Do not inline hot callsites for samplepgo in thinlto compile phase.
Summary: Because SamplePGO passes will be invoked twice in ThinLTO build: once at compile phase, the other at backend. We want to make sure the IR at the 2nd phase matches the hot part in profile, thus we do not want to inline hot callsites in the first phase. Reviewers: tejohnson, eraman Reviewed By: tejohnson Subscribers: mehdi_amini, llvm-commits, Prazek Differential Revision: https://reviews.llvm.org/D31201 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298428 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
700f6ad142
commit
287fe25641
@ -108,7 +108,8 @@ Pass *createFunctionImportPass();
|
||||
/// threshold given here.
|
||||
Pass *createFunctionInliningPass();
|
||||
Pass *createFunctionInliningPass(int Threshold);
|
||||
Pass *createFunctionInliningPass(unsigned OptLevel, unsigned SizeOptLevel);
|
||||
Pass *createFunctionInliningPass(unsigned OptLevel, unsigned SizeOptLevel,
|
||||
bool DisableInlineHotCallSite);
|
||||
Pass *createFunctionInliningPass(InlineParams &Params);
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
@ -670,7 +670,7 @@ void CallAnalyzer::updateThreshold(CallSite CS, Function &Callee) {
|
||||
BlockFrequencyInfo *CallerBFI = GetBFI ? &((*GetBFI)(*Caller)) : nullptr;
|
||||
if (PSI->isHotCallSite(CS, CallerBFI)) {
|
||||
DEBUG(dbgs() << "Hot callsite.\n");
|
||||
Threshold = MaxIfValid(Threshold, Params.HotCallSiteThreshold);
|
||||
Threshold = Params.HotCallSiteThreshold.getValue();
|
||||
} else if (PSI->isFunctionEntryHot(&Callee)) {
|
||||
DEBUG(dbgs() << "Hot callee.\n");
|
||||
// If callsite hotness can not be determined, we may still know
|
||||
|
@ -93,8 +93,12 @@ Pass *llvm::createFunctionInliningPass(int Threshold) {
|
||||
}
|
||||
|
||||
Pass *llvm::createFunctionInliningPass(unsigned OptLevel,
|
||||
unsigned SizeOptLevel) {
|
||||
return new SimpleInliner(llvm::getInlineParams(OptLevel, SizeOptLevel));
|
||||
unsigned SizeOptLevel,
|
||||
bool DisableInlineHotCallSite) {
|
||||
auto Param = llvm::getInlineParams(OptLevel, SizeOptLevel);
|
||||
if (DisableInlineHotCallSite)
|
||||
Param.HotCallSiteThreshold = 0;
|
||||
return new SimpleInliner(Param);
|
||||
}
|
||||
|
||||
Pass *llvm::createFunctionInliningPass(InlineParams &Params) {
|
||||
|
@ -181,7 +181,8 @@ int main(int argc, char **argv) {
|
||||
if (OptLevelO1)
|
||||
Builder.Inliner = createAlwaysInlinerLegacyPass();
|
||||
else if (OptLevelOs || OptLevelO2)
|
||||
Builder.Inliner = createFunctionInliningPass(2, OptLevelOs ? 1 : 0);
|
||||
Builder.Inliner = createFunctionInliningPass(
|
||||
2, OptLevelOs ? 1 : 0, false);
|
||||
else
|
||||
Builder.Inliner = createFunctionInliningPass(275);
|
||||
Builder.populateFunctionPassManager(PM);
|
||||
|
@ -268,7 +268,7 @@ static void AddOptimizationPasses(legacy::PassManagerBase &MPM,
|
||||
if (DisableInline) {
|
||||
// No inlining pass
|
||||
} else if (OptLevel > 1) {
|
||||
Builder.Inliner = createFunctionInliningPass(OptLevel, SizeLevel);
|
||||
Builder.Inliner = createFunctionInliningPass(OptLevel, SizeLevel, false);
|
||||
} else {
|
||||
Builder.Inliner = createAlwaysInlinerLegacyPass();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user