Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion llvm/include/llvm/Transforms/IPO/SampleProfile.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,8 @@ class SampleProfileLoaderPass : public PassInfoMixin<SampleProfileLoaderPass> {
SampleProfileLoaderPass(
std::string File = "", std::string RemappingFile = "",
ThinOrFullLTOPhase LTOPhase = ThinOrFullLTOPhase::None,
IntrusiveRefCntPtr<vfs::FileSystem> FS = nullptr);
IntrusiveRefCntPtr<vfs::FileSystem> FS = nullptr,
bool DisableSampleProfileInlining = false);

PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM);

Expand All @@ -50,6 +51,7 @@ class SampleProfileLoaderPass : public PassInfoMixin<SampleProfileLoaderPass> {
std::string ProfileRemappingFileName;
const ThinOrFullLTOPhase LTOPhase;
IntrusiveRefCntPtr<vfs::FileSystem> FS;
bool DisableSampleProfileInlining;
};

} // end namespace llvm
Expand Down
11 changes: 11 additions & 0 deletions llvm/lib/Passes/PassBuilderPipelines.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2153,6 +2153,17 @@ PassBuilder::buildO0DefaultPipeline(OptimizationLevel Level,
if (PGOOpt && PGOOpt->DebugInfoForProfiling)
MPM.addPass(createModuleToFunctionPassAdaptor(AddDiscriminatorsPass()));

if (PGOOpt && PGOOpt->Action == PGOOptions::SampleUse) {
// Explicitly disable sample loader inlining in O0 pipeline.
MPM.addPass(SampleProfileLoaderPass(PGOOpt->ProfileFile,
PGOOpt->ProfileRemappingFile,
ThinOrFullLTOPhase::None, nullptr,
/*DisableSampleProfileInlining=*/true));
// Cache ProfileSummaryAnalysis once to avoid the potential need to insert
// RequireAnalysisPass for PSI before subsequent non-module passes.
MPM.addPass(RequireAnalysisPass<ProfileSummaryAnalysis, Module>());
}

invokePipelineEarlySimplificationEPCallbacks(MPM, Level);

// Build a minimal pipeline based on the semantics required by LLVM,
Expand Down
22 changes: 15 additions & 7 deletions llvm/lib/Transforms/IPO/SampleProfile.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -470,7 +470,7 @@ class SampleProfileLoader final : public SampleProfileLoaderBaseImpl<Function> {
std::function<AssumptionCache &(Function &)> GetAssumptionCache,
std::function<TargetTransformInfo &(Function &)> GetTargetTransformInfo,
std::function<const TargetLibraryInfo &(Function &)> GetTLI,
LazyCallGraph &CG)
LazyCallGraph &CG, bool DisableSampleProfileInlining)
: SampleProfileLoaderBaseImpl(std::string(Name), std::string(RemapName),
std::move(FS)),
GetAC(std::move(GetAssumptionCache)),
Expand All @@ -479,7 +479,8 @@ class SampleProfileLoader final : public SampleProfileLoaderBaseImpl<Function> {
AnnotatedPassName(AnnotateSampleProfileInlinePhase
? llvm::AnnotateInlinePassName(InlineContext{
LTOPhase, InlinePass::SampleProfileInliner})
: CSINLINE_DEBUG) {}
: CSINLINE_DEBUG),
DisableSampleProfileInlining(DisableSampleProfileInlining) {}

bool doInitialization(Module &M, FunctionAnalysisManager *FAM = nullptr);
bool runOnModule(Module &M, ModuleAnalysisManager *AM,
Expand Down Expand Up @@ -593,6 +594,8 @@ class SampleProfileLoader final : public SampleProfileLoaderBaseImpl<Function> {
// attribute.
bool ProfAccForSymsInList;

bool DisableSampleProfileInlining;

// External inline advisor used to replay inline decision from remarks.
std::unique_ptr<InlineAdvisor> ExternalInlineAdvisor;

Expand Down Expand Up @@ -920,7 +923,7 @@ bool SampleProfileLoader::tryPromoteAndInlineCandidate(
Function &F, InlineCandidate &Candidate, uint64_t SumOrigin, uint64_t &Sum,
SmallVector<CallBase *, 8> *InlinedCallSite) {
// Bail out early if sample-loader inliner is disabled.
if (DisableSampleLoaderInlining)
if (DisableSampleProfileInlining)
return false;

// Bail out early if MaxNumPromotions is zero.
Expand Down Expand Up @@ -1231,7 +1234,7 @@ bool SampleProfileLoader::tryInlineCandidate(
InlineCandidate &Candidate, SmallVector<CallBase *, 8> *InlinedCallSites) {
// Do not attempt to inline a candidate if
// --disable-sample-loader-inlining is true.
if (DisableSampleLoaderInlining)
if (DisableSampleProfileInlining)
return false;

CallBase &CB = *Candidate.CallInstr;
Expand Down Expand Up @@ -2003,6 +2006,9 @@ bool SampleProfileLoader::doInitialization(Module &M,
/*EmitRemarks=*/false, InlineContext{LTOPhase, InlinePass::ReplaySampleProfileInliner});
}

if (DisableSampleLoaderInlining.getNumOccurrences())
DisableSampleProfileInlining = DisableSampleLoaderInlining;

// Apply tweaks if context-sensitive or probe-based profile is available.
if (Reader->profileIsCS() || Reader->profileIsPreInlined() ||
Reader->profileIsProbeBased()) {
Expand Down Expand Up @@ -2305,9 +2311,10 @@ bool SampleProfileLoader::runOnFunction(Function &F, ModuleAnalysisManager *AM)
}
SampleProfileLoaderPass::SampleProfileLoaderPass(
std::string File, std::string RemappingFile, ThinOrFullLTOPhase LTOPhase,
IntrusiveRefCntPtr<vfs::FileSystem> FS)
IntrusiveRefCntPtr<vfs::FileSystem> FS, bool DisableSampleProfileInlining)
: ProfileFileName(File), ProfileRemappingFileName(RemappingFile),
LTOPhase(LTOPhase), FS(std::move(FS)) {}
LTOPhase(LTOPhase), FS(std::move(FS)),
DisableSampleProfileInlining(DisableSampleProfileInlining) {}

PreservedAnalyses SampleProfileLoaderPass::run(Module &M,
ModuleAnalysisManager &AM) {
Expand All @@ -2332,7 +2339,8 @@ PreservedAnalyses SampleProfileLoaderPass::run(Module &M,
ProfileFileName.empty() ? SampleProfileFile : ProfileFileName,
ProfileRemappingFileName.empty() ? SampleProfileRemappingFile
: ProfileRemappingFileName,
LTOPhase, FS, GetAssumptionCache, GetTTI, GetTLI, CG);
LTOPhase, FS, GetAssumptionCache, GetTTI, GetTLI, CG,
DisableSampleProfileInlining);
if (!SampleLoader.doInitialization(M, &FAM))
return PreservedAnalyses::all();

Expand Down
6 changes: 5 additions & 1 deletion llvm/test/Other/new-pm-pgo-O0.ll
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,19 @@
; RUN: |FileCheck %s --check-prefixes=USE_POST_LINK,USE
; RUN: opt -debug-pass-manager -passes='lto<O0>' -pgo-kind=pgo-instr-use-pipeline -profile-file='%t.profdata' %s 2>&1 \
; RUN: |FileCheck %s --check-prefixes=USE_POST_LINK,USE
; RUN: opt -debug-pass-manager -passes='default<O0>' -pgo-kind=pgo-sample-use-pipeline -profile-file='%S/Inputs/new-pm-pgo.prof' %s 2>&1 \
; RUN: |FileCheck %s --check-prefixes=SAMPLE_USE

;
; GEN: Running pass: PGOInstrumentationGen
; USE_DEFAULT: Running pass: PGOInstrumentationUse
; USE_PRE_LINK: Running pass: PGOInstrumentationUse
; USE_POST_LINK-NOT: Running pass: PGOInstrumentationUse
; USE-NOT: Running pass: PGOIndirectCallPromotion
; USE-NOT: Running pass: PGOMemOPSizeOpt

; SAMPLE_USE: Running pass: AddDiscriminatorsPass
; SAMPLE_USE: Running pass: SampleProfileLoaderPass

define void @foo() {
ret void
}
Loading