[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