[llvm] [AMDGPU] Ensure positive InstOffset for buffer operations (PR #145504)

Aleksandar Spasojevic via llvm-commits llvm-commits at lists.llvm.org
Thu Sep 4 05:03:04 PDT 2025


https://github.com/aleksandar-amd updated https://github.com/llvm/llvm-project/pull/145504

>From d823e5eb661982657080ee57e3d77f41a69fca00 Mon Sep 17 00:00:00 2001
From: Aleksandar Spasojevic <aleksandar.spasojevic at amd.com>
Date: Tue, 24 Jun 2025 13:33:12 +0200
Subject: [PATCH 1/5] [AMDGPU] Ensure positive InstOffset for buffer operations

GFX12+ buffer ops require positive InstOffset per AMD hardware spec.
Modified assembler/disassembler to reject negative buffer offsets.
---
 .../AMDGPU/AsmParser/AMDGPUAsmParser.cpp      |  15 +-
 .../Disassembler/AMDGPUDisassembler.cpp       |  15 +
 llvm/test/MC/AMDGPU/gfx12_err.s               | 518 ++++++++++++++++++
 .../AMDGPU/gfx12_dasm_buffer_err.txt          |  25 +
 4 files changed, 571 insertions(+), 2 deletions(-)
 create mode 100644 llvm/test/MC/Disassembler/AMDGPU/gfx12_dasm_buffer_err.txt

diff --git a/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp b/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp
index 18d931433d3e1..b0b60b95e1ee6 100644
--- a/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp
+++ b/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp
@@ -4782,12 +4782,13 @@ bool AMDGPUAsmParser::validateOffset(const MCInst &Inst,
     return validateSMEMOffset(Inst, Operands);
 
   const auto &Op = Inst.getOperand(OpNum);
+  // GFX12+ buffer ops: InstOffset is signed 24, but must be positive
   if (isGFX12Plus() &&
       (TSFlags & (SIInstrFlags::MUBUF | SIInstrFlags::MTBUF))) {
     const unsigned OffsetSize = 24;
-    if (!isIntN(OffsetSize, Op.getImm())) {
+    if (!isUIntN(OffsetSize - 1, Op.getImm())) {
       Error(getFlatOffsetLoc(Operands),
-            Twine("expected a ") + Twine(OffsetSize) + "-bit signed offset");
+            Twine("expected a ") + Twine(OffsetSize - 1) + "-bit positive offset for buffer ops");
       return false;
     }
   } else {
@@ -4865,6 +4866,16 @@ bool AMDGPUAsmParser::validateSMEMOffset(const MCInst &Inst,
 
   uint64_t Offset = Op.getImm();
   bool IsBuffer = AMDGPU::getSMEMIsBuffer(Opcode);
+  // GFX12+ S_BUFFER_*: InstOffset is signed 24, but must be positive
+  if (isGFX12Plus() && IsBuffer) {
+    const unsigned OffsetSize = 24;
+    if (!isUIntN(OffsetSize, Offset)) {
+      Error(getSMEMOffsetLoc(Operands),
+            Twine("expected a ") + Twine(OffsetSize - 1) + "-bit positive offset for S_BUFFER ops");
+      return false;
+    }
+    return true;
+  }
   if (AMDGPU::isLegalSMRDEncodedUnsignedOffset(getSTI(), Offset) ||
       AMDGPU::isLegalSMRDEncodedSignedOffset(getSTI(), Offset, IsBuffer))
     return true;
diff --git a/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp b/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp
index 97ad457d000bb..659b0567851c5 100644
--- a/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp
+++ b/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp
@@ -843,6 +843,21 @@ DecodeStatus AMDGPUDisassembler::getInstruction(MCInst &MI, uint64_t &Size,
     }
   }
 
+  // Validate buffer offset for GFX12+ - must be positive
+  if ((MCII->get(MI.getOpcode()).TSFlags &
+       (SIInstrFlags::MTBUF | SIInstrFlags::MUBUF)) &&
+      AMDGPU::isGFX12Plus(STI)) {
+    int OffsetIdx =
+        AMDGPU::getNamedOperandIdx(MI.getOpcode(), AMDGPU::OpName::offset);
+    if (OffsetIdx != -1) {
+      uint32_t Imm = MI.getOperand(OffsetIdx).getImm();
+      int64_t SignedOffset = SignExtend64<24>(Imm);
+      if (SignedOffset < 0) {
+        return MCDisassembler::Fail;
+      }
+    }
+  }
+
   if (MCII->get(MI.getOpcode()).TSFlags &
       (SIInstrFlags::MTBUF | SIInstrFlags::MUBUF)) {
     int SWZOpIdx =
diff --git a/llvm/test/MC/AMDGPU/gfx12_err.s b/llvm/test/MC/AMDGPU/gfx12_err.s
index 6406b0647835a..5b7311e115c6e 100644
--- a/llvm/test/MC/AMDGPU/gfx12_err.s
+++ b/llvm/test/MC/AMDGPU/gfx12_err.s
@@ -128,3 +128,521 @@ s_alloc_vgpr vcc
 
 v_cvt_f32_fp8 v1, v3 clamp
 // GFX12-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
+
+v_cvt_f32_fp8 v1, v3 clamp
+// GFX12-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
+buffer_load_dword v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_load_dword v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_load_dwordx2 v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_load_dwordx3 v[0:2], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_load_dwordx4 v[0:3], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_load_short_d16 v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_load_format_d16_x v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_load_format_d16_xy v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_load_format_d16_xyz v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_load_format_d16_xyzw v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_load_short_d16_hi v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_load_format_d16_hi_x v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_load_sbyte_d16_hi v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_load_ubyte_d16_hi v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_load_sbyte_d16 v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_load_ubyte_d16 v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_load_sbyte v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_load_sshort v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_load_ubyte v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_load_ushort v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_store_byte v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_store_short v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_store_dword v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_store_dwordx2 v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_store_dwordx3 v[0:2], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_store_dwordx4 v[0:3], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_store_format_d16_x v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_store_format_d16_xy v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_store_format_d16_xyz v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_store_format_d16_xyzw v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_store_byte_d16_hi v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_store_short_d16_hi v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_store_format_d16_hi_x v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_add v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_add_x2 v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_and v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_and_x2 v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_cmpswap v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_cmpswap_x2 v[0:3], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_csub v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_dec v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_dec_x2 v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_inc v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_inc_x2 v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_fmax v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_smax v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_smax_x2 v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_umax v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_umax_x2 v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_fmin v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_smin v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_smin_x2 v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_umin v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_umin_x2 v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_or v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_or_x2 v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_sub v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_sub_x2 v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_swap v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_swap_x2 v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_xor v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_xor_x2 v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+tbuffer_load_format_d16_x v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+tbuffer_load_format_d16_xy v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+tbuffer_load_format_d16_xyz v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+tbuffer_load_format_d16_xyzw v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+tbuffer_load_format_x v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+tbuffer_load_format_xy v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+tbuffer_load_format_xyz v[0:2], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+tbuffer_load_format_xyzw v[0:3], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+tbuffer_store_format_d16_x v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+tbuffer_store_format_d16_xy v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+tbuffer_store_format_d16_xyz v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+tbuffer_store_format_d16_xyzw v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+tbuffer_store_format_x v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+tbuffer_store_format_xy v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+tbuffer_store_format_xyz v[0:2], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+tbuffer_store_format_xyzw v[0:3], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+s_buffer_load_b32 s5, s[4:7], s0 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for S_BUFFER ops
+
+s_buffer_load_b64 s[10:11], s[4:7], s0 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for S_BUFFER ops
+
+s_buffer_load_b96 s[20:22], s[4:7], s0 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for S_BUFFER ops
+
+s_buffer_load_i8 s5, s[4:7], s0 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for S_BUFFER ops
+
+s_buffer_load_u8 s5, s[4:7], s0 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for S_BUFFER ops
+
+s_buffer_load_i16 s5, s[4:7], s0 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for S_BUFFER ops
+
+s_buffer_load_u16 s5, s[4:7], s0 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for S_BUFFER ops
+
+s_buffer_prefetch_data s[20:23], -1, s10, 7
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for S_BUFFER ops
+
+buffer_load_dword v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_load_dword v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_load_dwordx2 v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_load_dwordx3 v[0:2], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_load_dwordx4 v[0:3], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_load_short_d16 v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_load_format_d16_x v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_load_format_d16_xy v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_load_format_d16_xyz v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_load_format_d16_xyzw v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_load_short_d16_hi v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_load_format_d16_hi_x v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_load_sbyte_d16_hi v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_load_ubyte_d16_hi v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_load_sbyte_d16 v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_load_ubyte_d16 v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_load_sbyte v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_load_sshort v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_load_ubyte v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_load_ushort v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_store_byte v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_store_short v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_store_dword v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_store_dwordx2 v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_store_dwordx3 v[0:2], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_store_dwordx4 v[0:3], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_store_format_d16_x v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_store_format_d16_xy v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_store_format_d16_xyz v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_store_format_d16_xyzw v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_store_byte_d16_hi v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_store_short_d16_hi v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_store_format_d16_hi_x v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_add v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_add_x2 v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_and v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_and_x2 v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_cmpswap v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_cmpswap_x2 v[0:3], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_csub v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_dec v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_dec_x2 v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_inc v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_inc_x2 v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_fmax v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_smax v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_smax_x2 v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_umax v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_umax_x2 v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_fmin v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_smin v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_smin_x2 v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_umin v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_umin_x2 v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_or v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_or_x2 v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_sub v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_sub_x2 v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_swap v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_swap_x2 v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_xor v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+buffer_atomic_xor_x2 v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+tbuffer_load_format_d16_x v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+tbuffer_load_format_d16_xy v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+tbuffer_load_format_d16_xyz v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+tbuffer_load_format_d16_xyzw v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+tbuffer_load_format_x v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+tbuffer_load_format_xy v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+tbuffer_load_format_xyz v[0:2], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+tbuffer_load_format_xyzw v[0:3], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+tbuffer_store_format_d16_x v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+tbuffer_store_format_d16_xy v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+tbuffer_store_format_d16_xyz v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+tbuffer_store_format_d16_xyzw v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+tbuffer_store_format_x v0, off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+tbuffer_store_format_xy v[0:1], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+tbuffer_store_format_xyz v[0:2], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+tbuffer_store_format_xyzw v[0:3], off, s[4:7], s8 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+
+s_buffer_load_b32 s5, s[4:7], s0 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for S_BUFFER ops
+
+s_buffer_load_b64 s[10:11], s[4:7], s0 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for S_BUFFER ops
+
+s_buffer_load_b96 s[20:22], s[4:7], s0 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for S_BUFFER ops
+
+s_buffer_load_i8 s5, s[4:7], s0 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for S_BUFFER ops
+
+s_buffer_load_u8 s5, s[4:7], s0 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for S_BUFFER ops
+
+s_buffer_load_i16 s5, s[4:7], s0 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for S_BUFFER ops
+
+s_buffer_load_u16 s5, s[4:7], s0 offset:-1
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for S_BUFFER ops
+
+s_buffer_prefetch_data s[20:23], -1, s10, 7
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for S_BUFFER ops
\ No newline at end of file
diff --git a/llvm/test/MC/Disassembler/AMDGPU/gfx12_dasm_buffer_err.txt b/llvm/test/MC/Disassembler/AMDGPU/gfx12_dasm_buffer_err.txt
new file mode 100644
index 0000000000000..d58a7e9b6116a
--- /dev/null
+++ b/llvm/test/MC/Disassembler/AMDGPU/gfx12_dasm_buffer_err.txt
@@ -0,0 +1,25 @@
+# RUN: not llvm-mc -disassemble -triple=amdgcn -mcpu=gfx1200 -show-encoding %s 2>&1 | FileCheck --implicit-check-not=warning: --check-prefix=GFX12 %s
+
+# buffer_load_b32 v1, off, s[0:3], s4 offset:-1
+# GFX12: warning: invalid instruction encoding
+[0x04,0x00,0x05,0xc4,0x01,0x00,0x80,0x00,0xff,0xff,0xff,0xff]
+
+# buffer_load_b32 v0, off, s[4:7], s8 offset:-1
+# GFX12: warning: invalid instruction encoding
+[0x08,0x00,0x05,0xc4,0x00,0x08,0x80,0x00,0xff,0xff,0xff,0xff]
+
+# buffer_load_b64 v[0:1], off, s[4:7], s8 offset:-1
+# GFX12: warning: invalid instruction encoding
+[0x08,0x40,0x05,0xc4,0x00,0x08,0x80,0x00,0xff,0xff,0xff,0xff]
+
+# buffer_store_b32 v0, off, s[4:7], s8 offset:-1
+# GFX12: warning: invalid instruction encoding
+[0x08,0x80,0x06,0xc4,0x00,0x08,0x80,0x00,0xff,0xff,0xff,0xff]
+
+# buffer_atomic_add v0, off, s[4:7], s8 offset:-1
+# GFX12: warning: invalid instruction encoding
+[0x08,0x40,0x0d,0xc4,0x00,0x08,0x80,0x00,0xff,0xff,0xff,0xff]
+
+# tbuffer_load_format_x v0, off, s[4:7], s8 format:0 offset:-1
+# GFX12: warning: invalid instruction encoding
+[0x08,0x00,0x20,0xc4,0x00,0x08,0x00,0x00,0xff,0xff,0xff,0xff]
\ No newline at end of file

>From ae166cbad50b3b43e62acb87e048fbbb003c45de Mon Sep 17 00:00:00 2001
From: Aleksandar Spasojevic <aleksandar.spasojevic at amd.com>
Date: Tue, 24 Jun 2025 16:33:09 +0200
Subject: [PATCH 2/5] [AMDGPU] Fix buffer offset validation per PR feedback

Resolving comments from review.
---
 .../AMDGPU/AsmParser/AMDGPUAsmParser.cpp      | 23 ++++++++-----------
 .../Disassembler/AMDGPUDisassembler.cpp       |  5 ++--
 .../Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp    |  8 ++++++-
 llvm/test/MC/AMDGPU/gfx12_err.s               |  2 +-
 .../AMDGPU/gfx12_dasm_buffer_err.txt          |  2 +-
 5 files changed, 20 insertions(+), 20 deletions(-)

diff --git a/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp b/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp
index b0b60b95e1ee6..0a201068abf11 100644
--- a/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp
+++ b/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp
@@ -4866,24 +4866,19 @@ bool AMDGPUAsmParser::validateSMEMOffset(const MCInst &Inst,
 
   uint64_t Offset = Op.getImm();
   bool IsBuffer = AMDGPU::getSMEMIsBuffer(Opcode);
-  // GFX12+ S_BUFFER_*: InstOffset is signed 24, but must be positive
-  if (isGFX12Plus() && IsBuffer) {
-    const unsigned OffsetSize = 24;
-    if (!isUIntN(OffsetSize, Offset)) {
-      Error(getSMEMOffsetLoc(Operands),
-            Twine("expected a ") + Twine(OffsetSize - 1) + "-bit positive offset for S_BUFFER ops");
-      return false;
-    }
-    return true;
-  }
   if (AMDGPU::isLegalSMRDEncodedUnsignedOffset(getSTI(), Offset) ||
       AMDGPU::isLegalSMRDEncodedSignedOffset(getSTI(), Offset, IsBuffer))
     return true;
 
-  Error(getSMEMOffsetLoc(Operands),
-        isGFX12Plus()          ? "expected a 24-bit signed offset"
-        : (isVI() || IsBuffer) ? "expected a 20-bit unsigned offset"
-                               : "expected a 21-bit signed offset");
+  // Generate appropriate error message based on generation and buffer type
+  if (isGFX12Plus() && IsBuffer)
+    Error(getSMEMOffsetLoc(Operands),
+          "expected a 23-bit positive offset for S_BUFFER ops");
+  else
+    Error(getSMEMOffsetLoc(Operands),
+          isGFX12Plus()          ? "expected a 24-bit signed offset"
+          : (isVI() || IsBuffer) ? "expected a 20-bit unsigned offset"
+                                 : "expected a 21-bit signed offset");
 
   return false;
 }
diff --git a/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp b/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp
index 659b0567851c5..6d82898829e5e 100644
--- a/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp
+++ b/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp
@@ -846,15 +846,14 @@ DecodeStatus AMDGPUDisassembler::getInstruction(MCInst &MI, uint64_t &Size,
   // Validate buffer offset for GFX12+ - must be positive
   if ((MCII->get(MI.getOpcode()).TSFlags &
        (SIInstrFlags::MTBUF | SIInstrFlags::MUBUF)) &&
-      AMDGPU::isGFX12Plus(STI)) {
+      isGFX12Plus()) {
     int OffsetIdx =
         AMDGPU::getNamedOperandIdx(MI.getOpcode(), AMDGPU::OpName::offset);
     if (OffsetIdx != -1) {
       uint32_t Imm = MI.getOperand(OffsetIdx).getImm();
       int64_t SignedOffset = SignExtend64<24>(Imm);
-      if (SignedOffset < 0) {
+      if (SignedOffset < 0)
         return MCDisassembler::Fail;
-      }
     }
   }
 
diff --git a/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp b/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp
index 294ab5543b7d8..e83efb91f69e9 100644
--- a/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp
+++ b/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp
@@ -3220,8 +3220,14 @@ bool isLegalSMRDEncodedUnsignedOffset(const MCSubtargetInfo &ST,
 
 bool isLegalSMRDEncodedSignedOffset(const MCSubtargetInfo &ST,
                                     int64_t EncodedOffset, bool IsBuffer) {
-  if (isGFX12Plus(ST))
+  if (isGFX12Plus(ST)) {
+          // GFX12+ S_BUFFER_*: InstOffset is signed 24, but must be positive (23-bit)
+      if (IsBuffer) {
+        constexpr const unsigned OffsetSize = 23;
+        return isUIntN(OffsetSize, EncodedOffset);
+      }
     return isInt<24>(EncodedOffset);
+  }
 
   return !IsBuffer && hasSMRDSignedImmOffset(ST) && isInt<21>(EncodedOffset);
 }
diff --git a/llvm/test/MC/AMDGPU/gfx12_err.s b/llvm/test/MC/AMDGPU/gfx12_err.s
index 5b7311e115c6e..dbde90d11ba2e 100644
--- a/llvm/test/MC/AMDGPU/gfx12_err.s
+++ b/llvm/test/MC/AMDGPU/gfx12_err.s
@@ -645,4 +645,4 @@ s_buffer_load_u16 s5, s[4:7], s0 offset:-1
 // GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for S_BUFFER ops
 
 s_buffer_prefetch_data s[20:23], -1, s10, 7
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for S_BUFFER ops
\ No newline at end of file
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for S_BUFFER ops
diff --git a/llvm/test/MC/Disassembler/AMDGPU/gfx12_dasm_buffer_err.txt b/llvm/test/MC/Disassembler/AMDGPU/gfx12_dasm_buffer_err.txt
index d58a7e9b6116a..fc7b9d02619e5 100644
--- a/llvm/test/MC/Disassembler/AMDGPU/gfx12_dasm_buffer_err.txt
+++ b/llvm/test/MC/Disassembler/AMDGPU/gfx12_dasm_buffer_err.txt
@@ -22,4 +22,4 @@
 
 # tbuffer_load_format_x v0, off, s[4:7], s8 format:0 offset:-1
 # GFX12: warning: invalid instruction encoding
-[0x08,0x00,0x20,0xc4,0x00,0x08,0x00,0x00,0xff,0xff,0xff,0xff]
\ No newline at end of file
+[0x08,0x00,0x20,0xc4,0x00,0x08,0x00,0x00,0xff,0xff,0xff,0xff]

>From 4911278b4e04d90a1db631091d8913309a4b13ac Mon Sep 17 00:00:00 2001
From: Aleksandar Spasojevic <aleksandar.spasojevic at amd.com>
Date: Wed, 25 Jun 2025 17:30:46 +0200
Subject: [PATCH 3/5] [AMDGPU] Fix buffer offset validation per PR feedback 2

---
 .../AMDGPU/AsmParser/AMDGPUAsmParser.cpp      |  17 +-
 .../Disassembler/AMDGPUDisassembler.cpp       |  20 +-
 .../AMDGPU/Disassembler/AMDGPUDisassembler.h  |   3 +
 .../Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp    |   7 +-
 llvm/test/MC/AMDGPU/gfx12_err.s               | 172 +++++++++---------
 .../AMDGPU/gfx12_dasm_buffer_err.txt          |  40 ++++
 6 files changed, 154 insertions(+), 105 deletions(-)

diff --git a/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp b/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp
index 0a201068abf11..2f92623874e2d 100644
--- a/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp
+++ b/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp
@@ -4788,7 +4788,7 @@ bool AMDGPUAsmParser::validateOffset(const MCInst &Inst,
     const unsigned OffsetSize = 24;
     if (!isUIntN(OffsetSize - 1, Op.getImm())) {
       Error(getFlatOffsetLoc(Operands),
-            Twine("expected a ") + Twine(OffsetSize - 1) + "-bit positive offset for buffer ops");
+            Twine("expected a ") + Twine(OffsetSize - 1) + "-bit non-negative offset for buffer ops");
       return false;
     }
   } else {
@@ -4870,15 +4870,12 @@ bool AMDGPUAsmParser::validateSMEMOffset(const MCInst &Inst,
       AMDGPU::isLegalSMRDEncodedSignedOffset(getSTI(), Offset, IsBuffer))
     return true;
 
-  // Generate appropriate error message based on generation and buffer type
-  if (isGFX12Plus() && IsBuffer)
-    Error(getSMEMOffsetLoc(Operands),
-          "expected a 23-bit positive offset for S_BUFFER ops");
-  else
-    Error(getSMEMOffsetLoc(Operands),
-          isGFX12Plus()          ? "expected a 24-bit signed offset"
-          : (isVI() || IsBuffer) ? "expected a 20-bit unsigned offset"
-                                 : "expected a 21-bit signed offset");
+  Error(getSMEMOffsetLoc(Operands),
+        isGFX12Plus() && IsBuffer
+            ? "expected a 23-bit non-negative offset for S_BUFFER ops"
+        : isGFX12Plus()        ? "expected a 24-bit signed offset"
+        : (isVI() || IsBuffer) ? "expected a 20-bit unsigned offset"
+                               : "expected a 21-bit signed offset");
 
   return false;
 }
diff --git a/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp b/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp
index 6d82898829e5e..526f4b8dd30f5 100644
--- a/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp
+++ b/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp
@@ -843,10 +843,8 @@ DecodeStatus AMDGPUDisassembler::getInstruction(MCInst &MI, uint64_t &Size,
     }
   }
 
-  // Validate buffer offset for GFX12+ - must be positive
-  if ((MCII->get(MI.getOpcode()).TSFlags &
-       (SIInstrFlags::MTBUF | SIInstrFlags::MUBUF)) &&
-      isGFX12Plus()) {
+  // Validate buffer instruction offsets for GFX12+ - must be non-negative
+  if (isGFX12Plus() && isBufferInstruction(MI)) {
     int OffsetIdx =
         AMDGPU::getNamedOperandIdx(MI.getOpcode(), AMDGPU::OpName::offset);
     if (OffsetIdx != -1) {
@@ -2786,6 +2784,20 @@ const MCExpr *AMDGPUDisassembler::createConstantSymbolExpr(StringRef Id,
   return MCSymbolRefExpr::create(Sym, Ctx);
 }
 
+bool AMDGPUDisassembler::isBufferInstruction(const MCInst &MI) const {
+  const uint64_t TSFlags = MCII->get(MI.getOpcode()).TSFlags;
+
+  // Check for MUBUF and MTBUF instructions
+  if (TSFlags & (SIInstrFlags::MTBUF | SIInstrFlags::MUBUF))
+    return true;
+
+  // Check for SMEM buffer instructions (S_BUFFER_* instructions)
+  if ((TSFlags & SIInstrFlags::SMRD) && AMDGPU::getSMEMIsBuffer(MI.getOpcode()))
+    return true;
+
+  return false;
+}
+
 //===----------------------------------------------------------------------===//
 // AMDGPUSymbolizer
 //===----------------------------------------------------------------------===//
diff --git a/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.h b/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.h
index ded447b6f8d5a..c1131c2936fc7 100644
--- a/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.h
+++ b/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.h
@@ -185,6 +185,9 @@ class AMDGPUDisassembler : public MCDisassembler {
   bool hasKernargPreload() const;
 
   bool isMacDPP(MCInst &MI) const;
+
+  /// Check if the instruction is a buffer operation (MUBUF, MTBUF, or S_BUFFER)
+  bool isBufferInstruction(const MCInst &MI) const;
 };
 
 //===----------------------------------------------------------------------===//
diff --git a/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp b/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp
index e83efb91f69e9..ff5cbd55484cf 100644
--- a/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp
+++ b/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp
@@ -3221,11 +3221,8 @@ bool isLegalSMRDEncodedUnsignedOffset(const MCSubtargetInfo &ST,
 bool isLegalSMRDEncodedSignedOffset(const MCSubtargetInfo &ST,
                                     int64_t EncodedOffset, bool IsBuffer) {
   if (isGFX12Plus(ST)) {
-          // GFX12+ S_BUFFER_*: InstOffset is signed 24, but must be positive (23-bit)
-      if (IsBuffer) {
-        constexpr const unsigned OffsetSize = 23;
-        return isUIntN(OffsetSize, EncodedOffset);
-      }
+    if (IsBuffer && EncodedOffset < 0)
+      return false;
     return isInt<24>(EncodedOffset);
   }
 
diff --git a/llvm/test/MC/AMDGPU/gfx12_err.s b/llvm/test/MC/AMDGPU/gfx12_err.s
index dbde90d11ba2e..49098d7659e60 100644
--- a/llvm/test/MC/AMDGPU/gfx12_err.s
+++ b/llvm/test/MC/AMDGPU/gfx12_err.s
@@ -390,259 +390,259 @@ s_buffer_prefetch_data s[20:23], -1, s10, 7
 // GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for S_BUFFER ops
 
 buffer_load_dword v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_load_dword v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_load_dwordx2 v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_load_dwordx3 v[0:2], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_load_dwordx4 v[0:3], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_load_short_d16 v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_load_format_d16_x v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_load_format_d16_xy v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_load_format_d16_xyz v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_load_format_d16_xyzw v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_load_short_d16_hi v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_load_format_d16_hi_x v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_load_sbyte_d16_hi v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_load_ubyte_d16_hi v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_load_sbyte_d16 v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_load_ubyte_d16 v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_load_sbyte v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_load_sshort v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_load_ubyte v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_load_ushort v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_store_byte v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_store_short v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_store_dword v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_store_dwordx2 v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_store_dwordx3 v[0:2], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_store_dwordx4 v[0:3], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_store_format_d16_x v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_store_format_d16_xy v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_store_format_d16_xyz v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_store_format_d16_xyzw v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_store_byte_d16_hi v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_store_short_d16_hi v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_store_format_d16_hi_x v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_atomic_add v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_atomic_add_x2 v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_atomic_and v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_atomic_and_x2 v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_atomic_cmpswap v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_atomic_cmpswap_x2 v[0:3], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_atomic_csub v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_atomic_dec v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_atomic_dec_x2 v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_atomic_inc v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_atomic_inc_x2 v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_atomic_fmax v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_atomic_smax v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_atomic_smax_x2 v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_atomic_umax v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_atomic_umax_x2 v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_atomic_fmin v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_atomic_smin v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_atomic_smin_x2 v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_atomic_umin v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_atomic_umin_x2 v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_atomic_or v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_atomic_or_x2 v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_atomic_sub v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_atomic_sub_x2 v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_atomic_swap v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_atomic_swap_x2 v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_atomic_xor v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 buffer_atomic_xor_x2 v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 tbuffer_load_format_d16_x v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 tbuffer_load_format_d16_xy v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 tbuffer_load_format_d16_xyz v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 tbuffer_load_format_d16_xyzw v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 tbuffer_load_format_x v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 tbuffer_load_format_xy v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 tbuffer_load_format_xyz v[0:2], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 tbuffer_load_format_xyzw v[0:3], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 tbuffer_store_format_d16_x v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 tbuffer_store_format_d16_xy v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 tbuffer_store_format_d16_xyz v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 tbuffer_store_format_d16_xyzw v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 tbuffer_store_format_x v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 tbuffer_store_format_xy v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 tbuffer_store_format_xyz v[0:2], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 tbuffer_store_format_xyzw v[0:3], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
 
 s_buffer_load_b32 s5, s[4:7], s0 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for S_BUFFER ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for S_BUFFER ops
 
 s_buffer_load_b64 s[10:11], s[4:7], s0 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for S_BUFFER ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for S_BUFFER ops
 
 s_buffer_load_b96 s[20:22], s[4:7], s0 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for S_BUFFER ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for S_BUFFER ops
 
 s_buffer_load_i8 s5, s[4:7], s0 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for S_BUFFER ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for S_BUFFER ops
 
 s_buffer_load_u8 s5, s[4:7], s0 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for S_BUFFER ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for S_BUFFER ops
 
 s_buffer_load_i16 s5, s[4:7], s0 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for S_BUFFER ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for S_BUFFER ops
 
 s_buffer_load_u16 s5, s[4:7], s0 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for S_BUFFER ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for S_BUFFER ops
 
 s_buffer_prefetch_data s[20:23], -1, s10, 7
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for S_BUFFER ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for S_BUFFER ops
diff --git a/llvm/test/MC/Disassembler/AMDGPU/gfx12_dasm_buffer_err.txt b/llvm/test/MC/Disassembler/AMDGPU/gfx12_dasm_buffer_err.txt
index fc7b9d02619e5..2dfc6616e09aa 100644
--- a/llvm/test/MC/Disassembler/AMDGPU/gfx12_dasm_buffer_err.txt
+++ b/llvm/test/MC/Disassembler/AMDGPU/gfx12_dasm_buffer_err.txt
@@ -23,3 +23,43 @@
 # tbuffer_load_format_x v0, off, s[4:7], s8 format:0 offset:-1
 # GFX12: warning: invalid instruction encoding
 [0x08,0x00,0x20,0xc4,0x00,0x08,0x00,0x00,0xff,0xff,0xff,0xff]
+
+# s_buffer_load_b32 s5, s[4:7], s0 offset:-1
+# GFX12: warning: invalid instruction encoding
+[0x42,0x01,0x02,0xf4,0xff,0xff,0xff,0x00]
+
+# s_buffer_load_b64 s[10:11], s[4:7], s0 offset:-1
+# GFX12: warning: invalid instruction encoding
+[0x82,0x22,0x02,0xf4,0xff,0xff,0xff,0x00]
+
+# s_buffer_load_b96 s[20:22], s[4:7], s0 offset:-1
+# GFX12: warning: invalid instruction encoding
+[0x82,0x52,0x02,0xf4,0xff,0xff,0xff,0x00]
+
+# s_buffer_load_b128 s[10:13], s[4:7], s0 offset:-1
+# GFX12: warning: invalid instruction encoding
+[0x82,0x22,0x02,0xf4,0xff,0xff,0xff,0x00]
+
+# s_buffer_load_b256 s[20:27], s[4:7], s0 offset:-1
+# GFX12: warning: invalid instruction encoding
+[0x82,0x52,0x02,0xf4,0xff,0xff,0xff,0x00]
+
+# s_buffer_load_b512 s[20:35], s[4:7], s0 offset:-1
+# GFX12: warning: invalid instruction encoding
+[0x82,0x52,0x02,0xf4,0xff,0xff,0xff,0x00]
+
+# s_buffer_load_i8 s5, s[4:7], s0 offset:-1
+# GFX12: warning: invalid instruction encoding
+[0x42,0x01,0x03,0xf4,0xff,0xff,0xff,0x00]
+
+# s_buffer_load_u8 s5, s[4:7], s0 offset:-1
+# GFX12: warning: invalid instruction encoding
+[0x42,0x21,0x03,0xf4,0xff,0xff,0xff,0x00]
+
+# s_buffer_load_i16 s5, s[4:7], s0 offset:-1
+# GFX12: warning: invalid instruction encoding
+[0x42,0x41,0x03,0xf4,0xff,0xff,0xff,0x00]
+
+# s_buffer_load_u16 s5, s[4:7], s0 offset:-1
+# GFX12: warning: invalid instruction encoding
+[0x42,0x61,0x03,0xf4,0xff,0xff,0xff,0x00]

>From 871d937c9ed6b72a6ab62bc96534c718d2ff5946 Mon Sep 17 00:00:00 2001
From: Aleksandar Spasojevic <aleksandar.spasojevic at amd.com>
Date: Fri, 18 Jul 2025 12:36:47 +0200
Subject: [PATCH 4/5] [AMDGPU] Fix buffer offset validation per PR feedback 3

---
 .../AMDGPU/AsmParser/AMDGPUAsmParser.cpp      |   6 +-
 .../Disassembler/AMDGPUDisassembler.cpp       |   2 +-
 llvm/test/MC/AMDGPU/gfx12_err.s               | 172 +++++++++---------
 3 files changed, 90 insertions(+), 90 deletions(-)

diff --git a/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp b/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp
index 2f92623874e2d..5b634cce885fb 100644
--- a/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp
+++ b/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp
@@ -4782,13 +4782,13 @@ bool AMDGPUAsmParser::validateOffset(const MCInst &Inst,
     return validateSMEMOffset(Inst, Operands);
 
   const auto &Op = Inst.getOperand(OpNum);
-  // GFX12+ buffer ops: InstOffset is signed 24, but must be positive
+  // GFX12+ buffer ops: InstOffset is signed 24, but must not be a negative.
   if (isGFX12Plus() &&
       (TSFlags & (SIInstrFlags::MUBUF | SIInstrFlags::MTBUF))) {
     const unsigned OffsetSize = 24;
     if (!isUIntN(OffsetSize - 1, Op.getImm())) {
       Error(getFlatOffsetLoc(Operands),
-            Twine("expected a ") + Twine(OffsetSize - 1) + "-bit non-negative offset for buffer ops");
+            Twine("expected a ") + Twine(OffsetSize - 1) + "-bit unsigned offset for buffer ops");
       return false;
     }
   } else {
@@ -4872,7 +4872,7 @@ bool AMDGPUAsmParser::validateSMEMOffset(const MCInst &Inst,
 
   Error(getSMEMOffsetLoc(Operands),
         isGFX12Plus() && IsBuffer
-            ? "expected a 23-bit non-negative offset for S_BUFFER ops"
+            ? "expected a 23-bit unsigned offset for buffer ops"
         : isGFX12Plus()        ? "expected a 24-bit signed offset"
         : (isVI() || IsBuffer) ? "expected a 20-bit unsigned offset"
                                : "expected a 21-bit signed offset");
diff --git a/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp b/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp
index 526f4b8dd30f5..b50b2a2e6e23c 100644
--- a/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp
+++ b/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp
@@ -843,7 +843,7 @@ DecodeStatus AMDGPUDisassembler::getInstruction(MCInst &MI, uint64_t &Size,
     }
   }
 
-  // Validate buffer instruction offsets for GFX12+ - must be non-negative
+  // Validate buffer instruction offsets for GFX12+ - must not be a negative.
   if (isGFX12Plus() && isBufferInstruction(MI)) {
     int OffsetIdx =
         AMDGPU::getNamedOperandIdx(MI.getOpcode(), AMDGPU::OpName::offset);
diff --git a/llvm/test/MC/AMDGPU/gfx12_err.s b/llvm/test/MC/AMDGPU/gfx12_err.s
index 49098d7659e60..a79f473f6a9a7 100644
--- a/llvm/test/MC/AMDGPU/gfx12_err.s
+++ b/llvm/test/MC/AMDGPU/gfx12_err.s
@@ -390,259 +390,259 @@ s_buffer_prefetch_data s[20:23], -1, s10, 7
 // GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for S_BUFFER ops
 
 buffer_load_dword v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_load_dword v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_load_dwordx2 v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_load_dwordx3 v[0:2], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_load_dwordx4 v[0:3], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_load_short_d16 v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_load_format_d16_x v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_load_format_d16_xy v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_load_format_d16_xyz v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_load_format_d16_xyzw v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_load_short_d16_hi v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_load_format_d16_hi_x v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_load_sbyte_d16_hi v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_load_ubyte_d16_hi v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_load_sbyte_d16 v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_load_ubyte_d16 v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_load_sbyte v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_load_sshort v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_load_ubyte v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_load_ushort v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_store_byte v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_store_short v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_store_dword v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_store_dwordx2 v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_store_dwordx3 v[0:2], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_store_dwordx4 v[0:3], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_store_format_d16_x v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_store_format_d16_xy v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_store_format_d16_xyz v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_store_format_d16_xyzw v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_store_byte_d16_hi v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_store_short_d16_hi v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_store_format_d16_hi_x v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_add v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_add_x2 v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_and v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_and_x2 v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_cmpswap v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_cmpswap_x2 v[0:3], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_csub v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_dec v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_dec_x2 v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_inc v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_inc_x2 v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_fmax v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_smax v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_smax_x2 v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_umax v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_umax_x2 v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_fmin v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_smin v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_smin_x2 v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_umin v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_umin_x2 v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_or v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_or_x2 v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_sub v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_sub_x2 v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_swap v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_swap_x2 v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_xor v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_xor_x2 v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 tbuffer_load_format_d16_x v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 tbuffer_load_format_d16_xy v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 tbuffer_load_format_d16_xyz v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 tbuffer_load_format_d16_xyzw v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 tbuffer_load_format_x v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 tbuffer_load_format_xy v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 tbuffer_load_format_xyz v[0:2], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 tbuffer_load_format_xyzw v[0:3], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 tbuffer_store_format_d16_x v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 tbuffer_store_format_d16_xy v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 tbuffer_store_format_d16_xyz v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 tbuffer_store_format_d16_xyzw v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 tbuffer_store_format_x v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 tbuffer_store_format_xy v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 tbuffer_store_format_xyz v[0:2], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 tbuffer_store_format_xyzw v[0:3], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 s_buffer_load_b32 s5, s[4:7], s0 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for S_BUFFER ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 s_buffer_load_b64 s[10:11], s[4:7], s0 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for S_BUFFER ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 s_buffer_load_b96 s[20:22], s[4:7], s0 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for S_BUFFER ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 s_buffer_load_i8 s5, s[4:7], s0 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for S_BUFFER ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 s_buffer_load_u8 s5, s[4:7], s0 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for S_BUFFER ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 s_buffer_load_i16 s5, s[4:7], s0 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for S_BUFFER ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 s_buffer_load_u16 s5, s[4:7], s0 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for S_BUFFER ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 s_buffer_prefetch_data s[20:23], -1, s10, 7
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit non-negative offset for S_BUFFER ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops

>From ce05d624645b0fd2046b7748ecfa83f7b2abc51e Mon Sep 17 00:00:00 2001
From: Aleksandar Spasojevic <aleksandar.spasojevic at amd.com>
Date: Thu, 4 Sep 2025 13:59:44 +0200
Subject: [PATCH 5/5] [AMDGPU] Resolving conflicts

---
 llvm/test/MC/AMDGPU/gfx12_err.s | 176 ++++++++++++++++----------------
 1 file changed, 86 insertions(+), 90 deletions(-)

diff --git a/llvm/test/MC/AMDGPU/gfx12_err.s b/llvm/test/MC/AMDGPU/gfx12_err.s
index a79f473f6a9a7..8f5975cf01e51 100644
--- a/llvm/test/MC/AMDGPU/gfx12_err.s
+++ b/llvm/test/MC/AMDGPU/gfx12_err.s
@@ -1,3 +1,4 @@
+// NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
 // RUN: not llvm-mc -triple=amdgcn -mcpu=gfx1200 -show-encoding %s 2>&1 | FileCheck --check-prefixes=GFX12-ERR --implicit-check-not=error: -strict-whitespace %s
 
 v_cubesc_f32_e64_dpp v5, v1, v2, 12345678 row_shr:4 row_mask:0xf bank_mask:0xf
@@ -129,265 +130,260 @@ s_alloc_vgpr vcc
 v_cvt_f32_fp8 v1, v3 clamp
 // GFX12-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
 
-v_cvt_f32_fp8 v1, v3 clamp
-// GFX12-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
-buffer_load_dword v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
-
 buffer_load_dword v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_load_dwordx2 v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_load_dwordx3 v[0:2], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_load_dwordx4 v[0:3], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_load_short_d16 v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_load_format_d16_x v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_load_format_d16_xy v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_load_format_d16_xyz v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_load_format_d16_xyzw v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_load_short_d16_hi v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_load_format_d16_hi_x v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_load_sbyte_d16_hi v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_load_ubyte_d16_hi v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_load_sbyte_d16 v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_load_ubyte_d16 v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_load_sbyte v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_load_sshort v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_load_ubyte v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_load_ushort v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_store_byte v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_store_short v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_store_dword v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_store_dwordx2 v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_store_dwordx3 v[0:2], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_store_dwordx4 v[0:3], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_store_format_d16_x v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_store_format_d16_xy v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_store_format_d16_xyz v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_store_format_d16_xyzw v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_store_byte_d16_hi v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_store_short_d16_hi v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_store_format_d16_hi_x v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_add v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_add_x2 v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_and v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_and_x2 v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_cmpswap v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_cmpswap_x2 v[0:3], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_csub v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_dec v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_dec_x2 v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_inc v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_inc_x2 v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_fmax v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_smax v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_smax_x2 v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_umax v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_umax_x2 v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_fmin v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_smin v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_smin_x2 v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_umin v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_umin_x2 v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_or v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_or_x2 v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_sub v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_sub_x2 v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_swap v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_swap_x2 v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_xor v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_atomic_xor_x2 v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 tbuffer_load_format_d16_x v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 tbuffer_load_format_d16_xy v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 tbuffer_load_format_d16_xyz v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 tbuffer_load_format_d16_xyzw v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 tbuffer_load_format_x v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 tbuffer_load_format_xy v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 tbuffer_load_format_xyz v[0:2], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 tbuffer_load_format_xyzw v[0:3], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 tbuffer_store_format_d16_x v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 tbuffer_store_format_d16_xy v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 tbuffer_store_format_d16_xyz v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 tbuffer_store_format_d16_xyzw v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 tbuffer_store_format_x v0, off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 tbuffer_store_format_xy v[0:1], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 tbuffer_store_format_xyz v[0:2], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 tbuffer_store_format_xyzw v[0:3], off, s[4:7], s8 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for buffer ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 s_buffer_load_b32 s5, s[4:7], s0 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for S_BUFFER ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 s_buffer_load_b64 s[10:11], s[4:7], s0 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for S_BUFFER ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 s_buffer_load_b96 s[20:22], s[4:7], s0 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for S_BUFFER ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 s_buffer_load_i8 s5, s[4:7], s0 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for S_BUFFER ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 s_buffer_load_u8 s5, s[4:7], s0 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for S_BUFFER ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 s_buffer_load_i16 s5, s[4:7], s0 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for S_BUFFER ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 s_buffer_load_u16 s5, s[4:7], s0 offset:-1
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for S_BUFFER ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 s_buffer_prefetch_data s[20:23], -1, s10, 7
-// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit positive offset for S_BUFFER ops
+// GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops
 
 buffer_load_dword v0, off, s[4:7], s8 offset:-1
 // GFX12-ERR: [[@LINE-1]]:{{[0-9]+}}: error: expected a 23-bit unsigned offset for buffer ops



More information about the llvm-commits mailing list