mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 19:23:23 +01:00
[ThinLTO] Port InlinerFunctionImportStats handling to new PM
Summary: The InlinerFunctionImportStats will collect and dump stats regarding how many function inlined into the module were imported by ThinLTO. Reviewers: wmi, dexonsmith Subscribers: mehdi_amini, inglorion, llvm-commits, eraman Differential Revision: https://reviews.llvm.org/D48729 llvm-svn: 335914
This commit is contained in:
parent
74ec48e91c
commit
54c43692b3
@ -96,12 +96,17 @@ class InlinerPass : public PassInfoMixin<InlinerPass> {
|
||||
public:
|
||||
InlinerPass(InlineParams Params = getInlineParams())
|
||||
: Params(std::move(Params)) {}
|
||||
~InlinerPass();
|
||||
InlinerPass(InlinerPass &&Arg)
|
||||
: Params(std::move(Arg.Params)),
|
||||
ImportedFunctionsStats(std::move(Arg.ImportedFunctionsStats)) {}
|
||||
|
||||
PreservedAnalyses run(LazyCallGraph::SCC &C, CGSCCAnalysisManager &AM,
|
||||
LazyCallGraph &CG, CGSCCUpdateResult &UR);
|
||||
|
||||
private:
|
||||
InlineParams Params;
|
||||
std::unique_ptr<ImportedFunctionsInliningStatistics> ImportedFunctionsStats;
|
||||
};
|
||||
|
||||
} // end namespace llvm
|
||||
|
@ -793,6 +793,14 @@ bool LegacyInlinerBase::removeDeadFunctions(CallGraph &CG,
|
||||
return true;
|
||||
}
|
||||
|
||||
InlinerPass::~InlinerPass() {
|
||||
if (ImportedFunctionsStats) {
|
||||
assert(InlinerFunctionImportStats != InlinerFunctionImportStatsOpts::No);
|
||||
ImportedFunctionsStats->dump(InlinerFunctionImportStats ==
|
||||
InlinerFunctionImportStatsOpts::Verbose);
|
||||
}
|
||||
}
|
||||
|
||||
PreservedAnalyses InlinerPass::run(LazyCallGraph::SCC &InitialC,
|
||||
CGSCCAnalysisManager &AM, LazyCallGraph &CG,
|
||||
CGSCCUpdateResult &UR) {
|
||||
@ -804,6 +812,13 @@ PreservedAnalyses InlinerPass::run(LazyCallGraph::SCC &InitialC,
|
||||
Module &M = *InitialC.begin()->getFunction().getParent();
|
||||
ProfileSummaryInfo *PSI = MAM.getCachedResult<ProfileSummaryAnalysis>(M);
|
||||
|
||||
if (!ImportedFunctionsStats &&
|
||||
InlinerFunctionImportStats != InlinerFunctionImportStatsOpts::No) {
|
||||
ImportedFunctionsStats =
|
||||
llvm::make_unique<ImportedFunctionsInliningStatistics>();
|
||||
ImportedFunctionsStats->setModuleInfo(M);
|
||||
}
|
||||
|
||||
// We use a single common worklist for calls across the entire SCC. We
|
||||
// process these in-order and append new calls introduced during inlining to
|
||||
// the end.
|
||||
@ -1009,6 +1024,9 @@ PreservedAnalyses InlinerPass::run(LazyCallGraph::SCC &InitialC,
|
||||
Calls.push_back({CS, NewHistoryID});
|
||||
}
|
||||
|
||||
if (InlinerFunctionImportStats != InlinerFunctionImportStatsOpts::No)
|
||||
ImportedFunctionsStats->recordInline(F, Callee);
|
||||
|
||||
// Merge the attributes based on the inlining.
|
||||
AttributeFuncs::mergeAttributesForInlining(F, Callee);
|
||||
|
||||
|
@ -1,6 +1,11 @@
|
||||
; First with legacy PM
|
||||
; RUN: opt -S -inline -inliner-function-import-stats=basic < %s 2>&1 | FileCheck %s -check-prefix=CHECK-BASIC -check-prefix=CHECK
|
||||
; RUN: opt -S -inline -inliner-function-import-stats=verbose < %s 2>&1 | FileCheck %s -check-prefix="CHECK-VERBOSE" -check-prefix=CHECK
|
||||
|
||||
; Do again with new PM
|
||||
; RUN: opt -S -passes=inline -inliner-function-import-stats=basic < %s 2>&1 | FileCheck %s -check-prefix=CHECK-BASIC -check-prefix=CHECK
|
||||
; RUN: opt -S -passes=inline -inliner-function-import-stats=verbose < %s 2>&1 | FileCheck %s -check-prefix="CHECK-VERBOSE" -check-prefix=CHECK
|
||||
|
||||
; CHECK: ------- Dumping inliner stats for [<stdin>] -------
|
||||
; CHECK-BASIC-NOT: -- List of inlined functions:
|
||||
; CHECK-BASIC-NOT: -- Inlined not imported function
|
||||
|
Loading…
Reference in New Issue
Block a user