Skip to content

Commit 5445edb

Browse files
authored
[PassBuilder] Replace bool LTOPreLink with ThinOrFullLTOPhase Phase (#114564)
This will allow more fine-grained control in the future.
1 parent 339c788 commit 5445edb

File tree

2 files changed

+17
-17
lines changed

2 files changed

+17
-17
lines changed

llvm/include/llvm/Passes/PassBuilder.h

+6-4
Original file line numberDiff line numberDiff line change
@@ -245,8 +245,9 @@ class PassBuilder {
245245
/// optimization and code generation without any link-time optimization. It
246246
/// typically correspond to frontend "-O[123]" options for optimization
247247
/// levels \c O1, \c O2 and \c O3 resp.
248-
ModulePassManager buildPerModuleDefaultPipeline(OptimizationLevel Level,
249-
bool LTOPreLink = false);
248+
ModulePassManager buildPerModuleDefaultPipeline(
249+
OptimizationLevel Level,
250+
ThinOrFullLTOPhase Phase = ThinOrFullLTOPhase::None);
250251

251252
/// Build a fat object default optimization pipeline.
252253
///
@@ -296,8 +297,9 @@ class PassBuilder {
296297
/// Build an O0 pipeline with the minimal semantically required passes.
297298
///
298299
/// This should only be used for non-LTO and LTO pre-link pipelines.
299-
ModulePassManager buildO0DefaultPipeline(OptimizationLevel Level,
300-
bool LTOPreLink = false);
300+
ModulePassManager
301+
buildO0DefaultPipeline(OptimizationLevel Level,
302+
ThinOrFullLTOPhase Phase = ThinOrFullLTOPhase::None);
301303

302304
/// Build the default `AAManager` with the default alias analysis pipeline
303305
/// registered.

llvm/lib/Passes/PassBuilderPipelines.cpp

+11-13
Original file line numberDiff line numberDiff line change
@@ -1601,9 +1601,9 @@ PassBuilder::buildModuleOptimizationPipeline(OptimizationLevel Level,
16011601

16021602
ModulePassManager
16031603
PassBuilder::buildPerModuleDefaultPipeline(OptimizationLevel Level,
1604-
bool LTOPreLink) {
1604+
ThinOrFullLTOPhase Phase) {
16051605
if (Level == OptimizationLevel::O0)
1606-
return buildO0DefaultPipeline(Level, LTOPreLink);
1606+
return buildO0DefaultPipeline(Level, Phase);
16071607

16081608
ModulePassManager MPM;
16091609

@@ -1619,14 +1619,11 @@ PassBuilder::buildPerModuleDefaultPipeline(OptimizationLevel Level,
16191619
// Apply module pipeline start EP callback.
16201620
invokePipelineStartEPCallbacks(MPM, Level);
16211621

1622-
const ThinOrFullLTOPhase LTOPhase = LTOPreLink
1623-
? ThinOrFullLTOPhase::FullLTOPreLink
1624-
: ThinOrFullLTOPhase::None;
16251622
// Add the core simplification pipeline.
1626-
MPM.addPass(buildModuleSimplificationPipeline(Level, LTOPhase));
1623+
MPM.addPass(buildModuleSimplificationPipeline(Level, Phase));
16271624

16281625
// Now add the optimization pipeline.
1629-
MPM.addPass(buildModuleOptimizationPipeline(Level, LTOPhase));
1626+
MPM.addPass(buildModuleOptimizationPipeline(Level, Phase));
16301627

16311628
if (PGOOpt && PGOOpt->PseudoProbeForProfiling &&
16321629
PGOOpt->Action == PGOOptions::SampleUse)
@@ -1635,7 +1632,7 @@ PassBuilder::buildPerModuleDefaultPipeline(OptimizationLevel Level,
16351632
// Emit annotation remarks.
16361633
addAnnotationRemarksPass(MPM);
16371634

1638-
if (LTOPreLink)
1635+
if (isLTOPreLink(Phase))
16391636
addRequiredLTOPreLinkPasses(MPM);
16401637
return MPM;
16411638
}
@@ -1673,7 +1670,7 @@ PassBuilder::buildFatLTODefaultPipeline(OptimizationLevel Level, bool ThinLTO,
16731670
ModulePassManager
16741671
PassBuilder::buildThinLTOPreLinkDefaultPipeline(OptimizationLevel Level) {
16751672
if (Level == OptimizationLevel::O0)
1676-
return buildO0DefaultPipeline(Level, /*LTOPreLink*/true);
1673+
return buildO0DefaultPipeline(Level, ThinOrFullLTOPhase::ThinLTOPreLink);
16771674

16781675
ModulePassManager MPM;
16791676

@@ -1794,7 +1791,7 @@ ModulePassManager
17941791
PassBuilder::buildLTOPreLinkDefaultPipeline(OptimizationLevel Level) {
17951792
// FIXME: We should use a customized pre-link pipeline!
17961793
return buildPerModuleDefaultPipeline(Level,
1797-
/* LTOPreLink */ true);
1794+
ThinOrFullLTOPhase::FullLTOPreLink);
17981795
}
17991796

18001797
ModulePassManager
@@ -2124,8 +2121,9 @@ PassBuilder::buildLTODefaultPipeline(OptimizationLevel Level,
21242121
return MPM;
21252122
}
21262123

2127-
ModulePassManager PassBuilder::buildO0DefaultPipeline(OptimizationLevel Level,
2128-
bool LTOPreLink) {
2124+
ModulePassManager
2125+
PassBuilder::buildO0DefaultPipeline(OptimizationLevel Level,
2126+
ThinOrFullLTOPhase Phase) {
21292127
assert(Level == OptimizationLevel::O0 &&
21302128
"buildO0DefaultPipeline should only be used with O0");
21312129

@@ -2220,7 +2218,7 @@ ModulePassManager PassBuilder::buildO0DefaultPipeline(OptimizationLevel Level,
22202218

22212219
invokeOptimizerLastEPCallbacks(MPM, Level);
22222220

2223-
if (LTOPreLink)
2221+
if (isLTOPreLink(Phase))
22242222
addRequiredLTOPreLinkPasses(MPM);
22252223

22262224
MPM.addPass(createModuleToFunctionPassAdaptor(AnnotationRemarksPass()));

0 commit comments

Comments
 (0)