diff options
Diffstat (limited to 'llvm/lib/Passes/PassBuilderPipelines.cpp')
| -rw-r--r-- | llvm/lib/Passes/PassBuilderPipelines.cpp | 33 |
1 files changed, 17 insertions, 16 deletions
diff --git a/llvm/lib/Passes/PassBuilderPipelines.cpp b/llvm/lib/Passes/PassBuilderPipelines.cpp index 7ad9c8bf206d..93a05c0f5a28 100644 --- a/llvm/lib/Passes/PassBuilderPipelines.cpp +++ b/llvm/lib/Passes/PassBuilderPipelines.cpp @@ -14,6 +14,7 @@ /// //===----------------------------------------------------------------------===// +#include "llvm/ADT/ScopeExit.h" #include "llvm/ADT/Statistic.h" #include "llvm/Analysis/AliasAnalysis.h" #include "llvm/Analysis/BasicAliasAnalysis.h" @@ -1816,6 +1817,17 @@ PassBuilder::buildLTODefaultPipeline(OptimizationLevel Level, // in the current module. MPM.addPass(CrossDSOCFIPass()); + MPM.addPass(CoroEarlyPass()); + + auto Exit = llvm::make_scope_exit([&]() { + MPM.addPass(CoroCleanupPass()); + + invokeFullLinkTimeOptimizationLastEPCallbacks(MPM, Level); + + // Emit annotation remarks. + addAnnotationRemarksPass(MPM); + }); + if (Level == OptimizationLevel::O0) { // The WPD and LowerTypeTest passes need to run at -O0 to lower type // metadata and intrinsics. @@ -1826,11 +1838,6 @@ PassBuilder::buildLTODefaultPipeline(OptimizationLevel Level, MPM.addPass(LowerTypeTestsPass(nullptr, nullptr, lowertypetests::DropTestKind::Assume)); - invokeFullLinkTimeOptimizationLastEPCallbacks(MPM, Level); - - // Emit annotation remarks. - addAnnotationRemarksPass(MPM); - return MPM; } @@ -1910,11 +1917,6 @@ PassBuilder::buildLTODefaultPipeline(OptimizationLevel Level, MPM.addPass(LowerTypeTestsPass(nullptr, nullptr, lowertypetests::DropTestKind::Assume)); - invokeFullLinkTimeOptimizationLastEPCallbacks(MPM, Level); - - // Emit annotation remarks. - addAnnotationRemarksPass(MPM); - return MPM; } @@ -1983,7 +1985,11 @@ PassBuilder::buildLTODefaultPipeline(OptimizationLevel Level, // If we didn't decide to inline a function, check to see if we can // transform it to pass arguments by value instead of by reference. - MPM.addPass(createModuleToPostOrderCGSCCPassAdaptor(ArgumentPromotionPass())); + CGSCCPassManager CGPM; + CGPM.addPass(ArgumentPromotionPass()); + CGPM.addPass(CoroSplitPass(Level != OptimizationLevel::O0)); + CGPM.addPass(CoroAnnotationElidePass()); + MPM.addPass(createModuleToPostOrderCGSCCPassAdaptor(std::move(CGPM))); FunctionPassManager FPM; // The IPO Passes may leave cruft around. Clean up after them. @@ -2135,11 +2141,6 @@ PassBuilder::buildLTODefaultPipeline(OptimizationLevel Level, if (PTO.CallGraphProfile) MPM.addPass(CGProfilePass(/*InLTOPostLink=*/true)); - invokeFullLinkTimeOptimizationLastEPCallbacks(MPM, Level); - - // Emit annotation remarks. - addAnnotationRemarksPass(MPM); - return MPM; } |
