[llvm] [AMDGPU] Fix GFX1250 hazard: S_SET_VGPR_MSB dropped (PR #184904)
Stanislav Mekhanoshin via llvm-commits
llvm-commits at lists.llvm.org
Thu Mar 5 14:49:17 PST 2026
================
@@ -3865,3 +3873,29 @@ bool GCNHazardRecognizer::fixSetRegMode(MachineInstr *MI) {
BuildMI(*MI->getParent(), MI, MI->getDebugLoc(), TII.get(AMDGPU::V_NOP_e32));
return true;
}
+
+bool GCNHazardRecognizer::fixSetRegModeToVGPRMSBHazard(MachineInstr *MI) {
+ if (MI->getOpcode() != AMDGPU::S_SETREG_IMM32_B32)
+ return false;
+
+ using namespace AMDGPU::Hwreg;
+ auto [HwRegId, Offset, Size] =
+ HwregEncoding::decode(MI->getOperand(1).getImm());
+ (void)Offset;
+ if (HwRegId != ID_MODE || Size <= 12)
+ return false;
+
+ MachineBasicBlock *MBB = MI->getParent();
+ const SIRegisterInfo &TRI = TII.getRegisterInfo();
+
+ if (!AMDGPU::VGPREncoding::willSetregNeedVGPRMSB(*MI, MBB, TII, TRI))
+ return false;
+
+ LLVM_DEBUG(dbgs() << " Inserting " << SetregModeToVGPRMSBHazardNOPs
+ << " s_nop(s) after s_setreg_imm32_b32 (MODE)"
+ << " for VGPR MSB hazard\n");
+ auto NextI = std::next(MI->getIterator());
+ for (unsigned I = 0; I < SetregModeToVGPRMSBHazardNOPs; ++I)
----------------
rampitec wrote:
`BuildMI(*MBB, NextI, MI->getDebugLoc(), TII.get(AMDGPU::S_NOP)).addImm(SetregModeToVGPRMSBHazardNOPs -1);` instead of the loop?
https://github.com/llvm/llvm-project/pull/184904
More information about the llvm-commits
mailing list