Index: include/llvm/Transforms/IPO/Inliner.h =================================================================== --- include/llvm/Transforms/IPO/Inliner.h +++ include/llvm/Transforms/IPO/Inliner.h @@ -96,12 +96,17 @@ 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 ImportedFunctionsStats; }; } // end namespace llvm Index: lib/Transforms/IPO/Inliner.cpp =================================================================== --- lib/Transforms/IPO/Inliner.cpp +++ lib/Transforms/IPO/Inliner.cpp @@ -793,6 +793,14 @@ 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 @@ Module &M = *InitialC.begin()->getFunction().getParent(); ProfileSummaryInfo *PSI = MAM.getCachedResult(M); + if (!ImportedFunctionsStats && + InlinerFunctionImportStats != InlinerFunctionImportStatsOpts::No) { + ImportedFunctionsStats = + llvm::make_unique(); + 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 @@ Calls.push_back({CS, NewHistoryID}); } + if (InlinerFunctionImportStats != InlinerFunctionImportStatsOpts::No) + ImportedFunctionsStats->recordInline(F, Callee); + // Merge the attributes based on the inlining. AttributeFuncs::mergeAttributesForInlining(F, Callee); Index: test/Transforms/Inline/inline_stats.ll =================================================================== --- test/Transforms/Inline/inline_stats.ll +++ test/Transforms/Inline/inline_stats.ll @@ -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 [] ------- ; CHECK-BASIC-NOT: -- List of inlined functions: ; CHECK-BASIC-NOT: -- Inlined not imported function