@@ -410,6 +410,19 @@ static bool isLTOPreLink(ThinOrFullLTOPhase Phase) {
410410 Phase == ThinOrFullLTOPhase::FullLTOPreLink;
411411}
412412
413+ // Helper to wrap conditionally Coro passes.
414+ static CoroConditionalWrapper buildCoroWrapper (ThinOrFullLTOPhase Phase) {
415+ // TODO: Skip passes according to Phase.
416+ ModulePassManager CoroPM;
417+ CoroPM.addPass (CoroEarlyPass ());
418+ CGSCCPassManager CGPM;
419+ CGPM.addPass (CoroSplitPass ());
420+ CoroPM.addPass (createModuleToPostOrderCGSCCPassAdaptor (std::move (CGPM)));
421+ CoroPM.addPass (CoroCleanupPass ());
422+ CoroPM.addPass (GlobalDCEPass ());
423+ return CoroConditionalWrapper (std::move (CoroPM));
424+ }
425+
413426// TODO: Investigate the cost/benefit of tail call elimination on debugging.
414427FunctionPassManager
415428PassBuilder::buildO1FunctionSimplificationPipeline (OptimizationLevel Level,
@@ -2250,14 +2263,7 @@ PassBuilder::buildO0DefaultPipeline(OptimizationLevel Level,
22502263 MPM.addPass (createModuleToFunctionPassAdaptor (std::move (FPM)));
22512264 }
22522265
2253- ModulePassManager CoroPM;
2254- CoroPM.addPass (CoroEarlyPass ());
2255- CGSCCPassManager CGPM;
2256- CGPM.addPass (CoroSplitPass ());
2257- CoroPM.addPass (createModuleToPostOrderCGSCCPassAdaptor (std::move (CGPM)));
2258- CoroPM.addPass (CoroCleanupPass ());
2259- CoroPM.addPass (GlobalDCEPass ());
2260- MPM.addPass (CoroConditionalWrapper (std::move (CoroPM)));
2266+ MPM.addPass (buildCoroWrapper (Phase));
22612267
22622268 invokeOptimizerLastEPCallbacks (MPM, Level, Phase);
22632269
0 commit comments