Skip to content

Commit c271a32

Browse files
committed
[PassBuilder] Replace bool LTOPreLink with ThinOrFullLTOPhase Phase
This will allow more fine-grained control in the future.
1 parent 10a1ea9 commit c271a32

File tree

2 files changed

+19
-15
lines changed

2 files changed

+19
-15
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

+13-11
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,6 +1632,8 @@ PassBuilder::buildPerModuleDefaultPipeline(OptimizationLevel Level,
16351632
// Emit annotation remarks.
16361633
addAnnotationRemarksPass(MPM);
16371634

1635+
bool LTOPreLink = Phase == ThinOrFullLTOPhase::FullLTOPreLink ||
1636+
Phase == ThinOrFullLTOPhase::ThinLTOPreLink;
16381637
if (LTOPreLink)
16391638
addRequiredLTOPreLinkPasses(MPM);
16401639
return MPM;
@@ -1673,7 +1672,7 @@ PassBuilder::buildFatLTODefaultPipeline(OptimizationLevel Level, bool ThinLTO,
16731672
ModulePassManager
16741673
PassBuilder::buildThinLTOPreLinkDefaultPipeline(OptimizationLevel Level) {
16751674
if (Level == OptimizationLevel::O0)
1676-
return buildO0DefaultPipeline(Level, /*LTOPreLink*/true);
1675+
return buildO0DefaultPipeline(Level, ThinOrFullLTOPhase::ThinLTOPreLink);
16771676

16781677
ModulePassManager MPM;
16791678

@@ -1794,7 +1793,7 @@ ModulePassManager
17941793
PassBuilder::buildLTOPreLinkDefaultPipeline(OptimizationLevel Level) {
17951794
// FIXME: We should use a customized pre-link pipeline!
17961795
return buildPerModuleDefaultPipeline(Level,
1797-
/* LTOPreLink */ true);
1796+
ThinOrFullLTOPhase::FullLTOPreLink);
17981797
}
17991798

18001799
ModulePassManager
@@ -2124,8 +2123,9 @@ PassBuilder::buildLTODefaultPipeline(OptimizationLevel Level,
21242123
return MPM;
21252124
}
21262125

2127-
ModulePassManager PassBuilder::buildO0DefaultPipeline(OptimizationLevel Level,
2128-
bool LTOPreLink) {
2126+
ModulePassManager
2127+
PassBuilder::buildO0DefaultPipeline(OptimizationLevel Level,
2128+
ThinOrFullLTOPhase Phase) {
21292129
assert(Level == OptimizationLevel::O0 &&
21302130
"buildO0DefaultPipeline should only be used with O0");
21312131

@@ -2220,6 +2220,8 @@ ModulePassManager PassBuilder::buildO0DefaultPipeline(OptimizationLevel Level,
22202220

22212221
invokeOptimizerLastEPCallbacks(MPM, Level);
22222222

2223+
bool LTOPreLink = Phase == ThinOrFullLTOPhase::FullLTOPreLink ||
2224+
Phase == ThinOrFullLTOPhase::ThinLTOPreLink;
22232225
if (LTOPreLink)
22242226
addRequiredLTOPreLinkPasses(MPM);
22252227

0 commit comments

Comments
 (0)