[llvm-branch-commits] [llvm] [AMDGPU] Machine verifier size check for 16bit register (PR #219734)

Matt Arsenault via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Sat Sep 5 13:20:10 PDT 2026


================
@@ -5290,9 +5290,78 @@ bool SIInstrInfo::verifyCopy(const MachineInstr &MI,
     ErrInfo = "illegal copy from vector register to SGPR";
     return false;
   }
+  // check for sreg32/vgpr3/vgpr16 mismatch
+  unsigned DstSubReg = MI.getOperand(0).getSubReg();
+  unsigned SrcSubReg = MI.getOperand(1).getSubReg();
+  auto *TRI = MRI.getTargetRegisterInfo();
+
+  if (RI.isAGPR(MRI, DstReg) || RI.isAGPR(MRI, SrcReg))
+    return true;
+
+  if (!DstReg.isVirtual() || !SrcReg.isVirtual())
+    return true;
+
+  auto *DstRC = getOpRegClass(MI, 0);
+  if (DstSubReg != AMDGPU::NoSubRegister)
+    DstRC = TRI->getSubRegisterClass(DstRC, DstSubReg);
+
+  auto *SrcRC = getOpRegClass(MI, 1);
+  if (SrcSubReg != AMDGPU::NoSubRegister)
+    SrcRC = TRI->getSubRegisterClass(SrcRC, SrcSubReg);
+
+  DstRC = RI.getEquivalentVGPRClass(DstRC);
+  SrcRC = RI.getEquivalentVGPRClass(SrcRC);
+  if (RI.getMatchingSuperRegClass(SrcRC, DstRC, AMDGPU::lo16) ||
+      RI.getMatchingSuperRegClass(DstRC, SrcRC, AMDGPU::lo16)) {
+    ErrInfo = "illegal copy with different size src/dst reg";
+    return false;
+  }
+
+  return true;
+}
+
+bool SIInstrInfo::verifyRegsequence(const MachineInstr &MI,
----------------
arsenm wrote:

```suggestion
bool SIInstrInfo::verifyRegSequence(const MachineInstr &MI,
```

https://github.com/llvm/llvm-project/pull/219734


More information about the llvm-branch-commits mailing list