@@ -419,14 +419,16 @@ static bool isLTOPostLink(ThinOrFullLTOPhase Phase) {
419
419
420
420
// Helper to wrap conditionally Coro passes.
421
421
static CoroConditionalWrapper buildCoroWrapper (ThinOrFullLTOPhase Phase) {
422
- // TODO: Skip passes according to Phase.
423
422
ModulePassManager CoroPM;
424
- CoroPM.addPass (CoroEarlyPass ());
425
- CGSCCPassManager CGPM;
426
- CGPM.addPass (CoroSplitPass ());
427
- CoroPM.addPass (createModuleToPostOrderCGSCCPassAdaptor (std::move (CGPM)));
428
- CoroPM.addPass (CoroCleanupPass ());
429
- CoroPM.addPass (GlobalDCEPass ());
423
+ if (!isLTOPostLink (Phase))
424
+ CoroPM.addPass (CoroEarlyPass ());
425
+ if (!isLTOPreLink (Phase)) {
426
+ CGSCCPassManager CGPM;
427
+ CGPM.addPass (CoroSplitPass ());
428
+ CoroPM.addPass (createModuleToPostOrderCGSCCPassAdaptor (std::move (CGPM)));
429
+ CoroPM.addPass (CoroCleanupPass ());
430
+ CoroPM.addPass (GlobalDCEPass ());
431
+ }
430
432
return CoroConditionalWrapper (std::move (CoroPM));
431
433
}
432
434
@@ -1010,7 +1012,7 @@ PassBuilder::buildInlinerPipeline(OptimizationLevel Level,
1010
1012
MainCGPipeline.addPass (createCGSCCToFunctionPassAdaptor (
1011
1013
RequireAnalysisPass<ShouldNotRunFunctionPassesAnalysis, Function>()));
1012
1014
1013
- if (Phase != ThinOrFullLTOPhase::ThinLTOPreLink ) {
1015
+ if (! isLTOPreLink (Phase) ) {
1014
1016
MainCGPipeline.addPass (CoroSplitPass (Level != OptimizationLevel::O0));
1015
1017
MainCGPipeline.addPass (CoroAnnotationElidePass ());
1016
1018
}
@@ -1060,7 +1062,7 @@ PassBuilder::buildModuleInlinerPipeline(OptimizationLevel Level,
1060
1062
buildFunctionSimplificationPipeline (Level, Phase),
1061
1063
PTO.EagerlyInvalidateAnalyses ));
1062
1064
1063
- if (Phase != ThinOrFullLTOPhase::ThinLTOPreLink ) {
1065
+ if (! isLTOPreLink (Phase) ) {
1064
1066
MPM.addPass (createModuleToPostOrderCGSCCPassAdaptor (
1065
1067
CoroSplitPass (Level != OptimizationLevel::O0)));
1066
1068
MPM.addPass (
@@ -1120,7 +1122,8 @@ PassBuilder::buildModuleSimplificationPipeline(OptimizationLevel Level,
1120
1122
// Do basic inference of function attributes from known properties of system
1121
1123
// libraries and other oracles.
1122
1124
MPM.addPass (InferFunctionAttrsPass ());
1123
- MPM.addPass (CoroEarlyPass ());
1125
+ if (!isLTOPostLink (Phase))
1126
+ MPM.addPass (CoroEarlyPass ());
1124
1127
1125
1128
FunctionPassManager EarlyFPM;
1126
1129
EarlyFPM.addPass (EntryExitInstrumenterPass (/* PostInlining=*/ false ));
@@ -1283,7 +1286,7 @@ PassBuilder::buildModuleSimplificationPipeline(OptimizationLevel Level,
1283
1286
// and argument promotion.
1284
1287
MPM.addPass (DeadArgumentEliminationPass ());
1285
1288
1286
- if (Phase != ThinOrFullLTOPhase::ThinLTOPreLink )
1289
+ if (! isLTOPreLink (Phase) )
1287
1290
MPM.addPass (CoroCleanupPass ());
1288
1291
1289
1292
// Optimize globals now that functions are fully simplified.
@@ -1948,9 +1951,6 @@ PassBuilder::buildLTODefaultPipeline(OptimizationLevel Level,
1948
1951
return MPM;
1949
1952
}
1950
1953
1951
- // TODO: Skip to match buildCoroWrapper.
1952
- MPM.addPass (CoroEarlyPass ());
1953
-
1954
1954
// Optimize globals to try and fold them into constants.
1955
1955
MPM.addPass (GlobalOptPass ());
1956
1956
0 commit comments