forked from OSchip/llvm-project
[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
23d8282047
commit
e87868b7e9
|
@ -96,12 +96,17 @@ class InlinerPass : public PassInfoMixin<InlinerPass> {
|
||||||
public:
|
public:
|
||||||
InlinerPass(InlineParams Params = getInlineParams())
|
InlinerPass(InlineParams Params = getInlineParams())
|
||||||
: Params(std::move(Params)) {}
|
: 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,
|
PreservedAnalyses run(LazyCallGraph::SCC &C, CGSCCAnalysisManager &AM,
|
||||||
LazyCallGraph &CG, CGSCCUpdateResult &UR);
|
LazyCallGraph &CG, CGSCCUpdateResult &UR);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
InlineParams Params;
|
InlineParams Params;
|
||||||
|
std::unique_ptr<ImportedFunctionsInliningStatistics> ImportedFunctionsStats;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace llvm
|
} // end namespace llvm
|
||||||
|
|
|
@ -793,6 +793,14 @@ bool LegacyInlinerBase::removeDeadFunctions(CallGraph &CG,
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
InlinerPass::~InlinerPass() {
|
||||||
|
if (ImportedFunctionsStats) {
|
||||||
|
assert(InlinerFunctionImportStats != InlinerFunctionImportStatsOpts::No);
|
||||||
|
ImportedFunctionsStats->dump(InlinerFunctionImportStats ==
|
||||||
|
InlinerFunctionImportStatsOpts::Verbose);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
PreservedAnalyses InlinerPass::run(LazyCallGraph::SCC &InitialC,
|
PreservedAnalyses InlinerPass::run(LazyCallGraph::SCC &InitialC,
|
||||||
CGSCCAnalysisManager &AM, LazyCallGraph &CG,
|
CGSCCAnalysisManager &AM, LazyCallGraph &CG,
|
||||||
CGSCCUpdateResult &UR) {
|
CGSCCUpdateResult &UR) {
|
||||||
|
@ -804,6 +812,13 @@ PreservedAnalyses InlinerPass::run(LazyCallGraph::SCC &InitialC,
|
||||||
Module &M = *InitialC.begin()->getFunction().getParent();
|
Module &M = *InitialC.begin()->getFunction().getParent();
|
||||||
ProfileSummaryInfo *PSI = MAM.getCachedResult<ProfileSummaryAnalysis>(M);
|
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
|
// 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
|
// process these in-order and append new calls introduced during inlining to
|
||||||
// the end.
|
// the end.
|
||||||
|
@ -1009,6 +1024,9 @@ PreservedAnalyses InlinerPass::run(LazyCallGraph::SCC &InitialC,
|
||||||
Calls.push_back({CS, NewHistoryID});
|
Calls.push_back({CS, NewHistoryID});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (InlinerFunctionImportStats != InlinerFunctionImportStatsOpts::No)
|
||||||
|
ImportedFunctionsStats->recordInline(F, Callee);
|
||||||
|
|
||||||
// Merge the attributes based on the inlining.
|
// Merge the attributes based on the inlining.
|
||||||
AttributeFuncs::mergeAttributesForInlining(F, Callee);
|
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=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
|
; 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: ------- Dumping inliner stats for [<stdin>] -------
|
||||||
; CHECK-BASIC-NOT: -- List of inlined functions:
|
; CHECK-BASIC-NOT: -- List of inlined functions:
|
||||||
; CHECK-BASIC-NOT: -- Inlined not imported function
|
; CHECK-BASIC-NOT: -- Inlined not imported function
|
||||||
|
|
Loading…
Reference in New Issue