Author: Arthur Eubanks Date: 2020-12-28T14:03:10-08:00 New Revision: 6c36286a2e180443005d31a9cec2ca182963bcad
URL: https://github.com/llvm/llvm-project/commit/6c36286a2e180443005d31a9cec2ca182963bcad DIFF: https://github.com/llvm/llvm-project/commit/6c36286a2e180443005d31a9cec2ca182963bcad.diff LOG: [NewPM] Fix CGSCCOptimizerLateEPCallbacks place in pipeline CGSCCOptimizerLateEPCallbacks are supposed to be run before the function simplification pipeline, like in the legacy PM and as specified in the comments for registerCGSCCOptimizerLateEPCallback(). Reviewed By: ychen Differential Revision: https://reviews.llvm.org/D93871 Added: Modified: llvm/lib/Passes/PassBuilder.cpp llvm/test/Other/new-pm-defaults.ll Removed: ################################################################################ diff --git a/llvm/lib/Passes/PassBuilder.cpp b/llvm/lib/Passes/PassBuilder.cpp index 635e7bab1a7a..1f1004c2c414 100644 --- a/llvm/lib/Passes/PassBuilder.cpp +++ b/llvm/lib/Passes/PassBuilder.cpp @@ -986,14 +986,14 @@ PassBuilder::buildInlinerPipeline(OptimizationLevel Level, ThinLTOPhase Phase, if (Level == OptimizationLevel::O2 || Level == OptimizationLevel::O3) MainCGPipeline.addPass(OpenMPOptPass()); + for (auto &C : CGSCCOptimizerLateEPCallbacks) + C(MainCGPipeline, Level); + // Lastly, add the core function simplification pipeline nested inside the // CGSCC walk. MainCGPipeline.addPass(createCGSCCToFunctionPassAdaptor( buildFunctionSimplificationPipeline(Level, Phase))); - for (auto &C : CGSCCOptimizerLateEPCallbacks) - C(MainCGPipeline, Level); - return MIWP; } @@ -1800,6 +1800,13 @@ ModulePassManager PassBuilder::buildO0DefaultPipeline(OptimizationLevel Level, MPM.addPass( createModuleToFunctionPassAdaptor(LowerMatrixIntrinsicsPass(true))); + if (!CGSCCOptimizerLateEPCallbacks.empty()) { + CGSCCPassManager CGPM(DebugLogging); + for (auto &C : CGSCCOptimizerLateEPCallbacks) + C(CGPM, Level); + if (!CGPM.isEmpty()) + MPM.addPass(createModuleToPostOrderCGSCCPassAdaptor(std::move(CGPM))); + } if (!LateLoopOptimizationsEPCallbacks.empty()) { LoopPassManager LPM(DebugLogging); for (auto &C : LateLoopOptimizationsEPCallbacks) @@ -1825,13 +1832,6 @@ ModulePassManager PassBuilder::buildO0DefaultPipeline(OptimizationLevel Level, if (!FPM.isEmpty()) MPM.addPass(createModuleToFunctionPassAdaptor(std::move(FPM))); } - if (!CGSCCOptimizerLateEPCallbacks.empty()) { - CGSCCPassManager CGPM(DebugLogging); - for (auto &C : CGSCCOptimizerLateEPCallbacks) - C(CGPM, Level); - if (!CGPM.isEmpty()) - MPM.addPass(createModuleToPostOrderCGSCCPassAdaptor(std::move(CGPM))); - } if (!VectorizerStartEPCallbacks.empty()) { FunctionPassManager FPM(DebugLogging); for (auto &C : VectorizerStartEPCallbacks) diff --git a/llvm/test/Other/new-pm-defaults.ll b/llvm/test/Other/new-pm-defaults.ll index 6377aa0cd813..62f9d895fa72 100644 --- a/llvm/test/Other/new-pm-defaults.ll +++ b/llvm/test/Other/new-pm-defaults.ll @@ -128,6 +128,7 @@ ; CHECK-O3-NEXT: Running pass: ArgumentPromotionPass ; CHECK-O2-NEXT: Running pass: OpenMPOptPass on (foo) ; CHECK-O3-NEXT: Running pass: OpenMPOptPass on (foo) +; CHECK-EP-CGSCC-LATE-NEXT: Running pass: NoOpCGSCCPass ; CHECK-O-NEXT: Starting llvm::Function pass manager run. ; CHECK-O-NEXT: Running pass: SROA ; CHECK-O-NEXT: Running pass: EarlyCSEPass @@ -206,7 +207,6 @@ ; CHECK-O-NEXT: Running pass: InstCombinePass ; CHECK-EP-PEEPHOLE-NEXT: Running pass: NoOpFunctionPass ; CHECK-O-NEXT: Finished llvm::Function pass manager run. -; CHECK-EP-CGSCC-LATE-NEXT: Running pass: NoOpCGSCCPass ; CHECK-O-NEXT: Finished CGSCC pass manager run. ; CHECK-O-NEXT: Finished llvm::Module pass manager run. ; CHECK-O-NEXT: Running pass: GlobalOptPass _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits