diff --git a/tools/ptoas/ptoas.cpp b/tools/ptoas/ptoas.cpp index 2efcdec703..ed79976cef 100644 --- a/tools/ptoas/ptoas.cpp +++ b/tools/ptoas/ptoas.cpp @@ -3104,6 +3104,9 @@ static void prepareVPTOForEmission(PassManager &pm) { kernelModulePM.addPass(pto::createPTOInlineLibCallPass()); kernelModulePM.addPass(createCanonicalizerPass()); kernelModulePM.addPass(createCSEPass()); + // Reconstruct the optimized reduction tree before scheduling so the + // scheduler sees the final MI instruction set and dependencies. + kernelModulePM.addPass(pto::createVPTOCombineReductionsPass()); if (vptoSchedulerMode != VPTOSchedulerCLIMode::Off) { pto::VPTOSchedulerOptions schedulerOptions; schedulerOptions.mode = vptoSchedulerMode == VPTOSchedulerCLIMode::Analyze @@ -3111,7 +3114,6 @@ static void prepareVPTOForEmission(PassManager &pm) { : "on"; kernelModulePM.addPass(pto::createVPTOSchedulerPass(schedulerOptions)); } - kernelModulePM.addPass(pto::createVPTOCombineReductionsPass()); kernelModulePM.addPass(createCSEPass()); kernelModulePM.addPass(pto::createPTOValidateVPTOEmissionIRPass()); }