diff --git a/llvm/lib/Passes/PassBuilderPipelines.cpp b/llvm/lib/Passes/PassBuilderPipelines.cpp index 63e70d7e182bd..adb005b5839f5 100644 --- a/llvm/lib/Passes/PassBuilderPipelines.cpp +++ b/llvm/lib/Passes/PassBuilderPipelines.cpp @@ -410,6 +410,19 @@ static bool isLTOPreLink(ThinOrFullLTOPhase Phase) { Phase == ThinOrFullLTOPhase::FullLTOPreLink; } +// Helper to wrap conditionally Coro passes. +static CoroConditionalWrapper buildCoroWrapper(ThinOrFullLTOPhase Phase) { + // TODO: Skip passes according to Phase. + ModulePassManager CoroPM; + CoroPM.addPass(CoroEarlyPass()); + CGSCCPassManager CGPM; + CGPM.addPass(CoroSplitPass()); + CoroPM.addPass(createModuleToPostOrderCGSCCPassAdaptor(std::move(CGPM))); + CoroPM.addPass(CoroCleanupPass()); + CoroPM.addPass(GlobalDCEPass()); + return CoroConditionalWrapper(std::move(CoroPM)); +} + // TODO: Investigate the cost/benefit of tail call elimination on debugging. FunctionPassManager PassBuilder::buildO1FunctionSimplificationPipeline(OptimizationLevel Level, @@ -2250,14 +2263,7 @@ PassBuilder::buildO0DefaultPipeline(OptimizationLevel Level, MPM.addPass(createModuleToFunctionPassAdaptor(std::move(FPM))); } - ModulePassManager CoroPM; - CoroPM.addPass(CoroEarlyPass()); - CGSCCPassManager CGPM; - CGPM.addPass(CoroSplitPass()); - CoroPM.addPass(createModuleToPostOrderCGSCCPassAdaptor(std::move(CGPM))); - CoroPM.addPass(CoroCleanupPass()); - CoroPM.addPass(GlobalDCEPass()); - MPM.addPass(CoroConditionalWrapper(std::move(CoroPM))); + MPM.addPass(buildCoroWrapper(Phase)); invokeOptimizerLastEPCallbacks(MPM, Level, Phase);