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

Aleksandar Spasojevic via llvm-commits llvm-commits at lists.llvm.org
Thu Jun 26 02:57:55 PDT 2025


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

>From 3bed6eeef5f98a1ee421da6c931c71e4c102ab8f 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/3] [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               | 258 ++++++++++++++++++
 .../AMDGPU/gfx12_dasm_buffer_err.txt          |  25 ++
 4 files changed, 311 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 30dcd6d81f16d..2f759eb2609f1 100644
--- a/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp
+++ b/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp
@@ -4464,12 +4464,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 {
@@ -4547,6 +4548,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 59c72fcbff18a..2d68b1347a298 100644
--- a/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp
+++ b/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp
@@ -812,6 +812,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 9ddb91e25afe6..89278feb43ac3 100644
--- a/llvm/test/MC/AMDGPU/gfx12_err.s
+++ b/llvm/test/MC/AMDGPU/gfx12_err.s
@@ -125,3 +125,261 @@ s_alloc_vgpr exec
 
 s_alloc_vgpr vcc
 // 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
\ 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 55c93d4df254d4cb17990c9573fe45196c2b270a 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/3] [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 2f759eb2609f1..e014d069b28db 100644
--- a/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp
+++ b/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp
@@ -4548,24 +4548,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 2d68b1347a298..044c128f542f7 100644
--- a/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp
+++ b/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp
@@ -815,15 +815,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 13549e5c4e58b..180dbb7a78650 100644
--- a/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp
+++ b/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp
@@ -2954,8 +2954,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 89278feb43ac3..a9972c03f7430 100644
--- a/llvm/test/MC/AMDGPU/gfx12_err.s
+++ b/llvm/test/MC/AMDGPU/gfx12_err.s
@@ -382,4 +382,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 57d5e0ffe3457b2bfe7d0173dbf165fe2dd0212d 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/3] [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 e014d069b28db..4090820445be1 100644
--- a/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp
+++ b/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp
@@ -4470,7 +4470,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 {
@@ -4552,15 +4552,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 044c128f542f7..6160fd73dfa28 100644
--- a/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp
+++ b/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp
@@ -812,10 +812,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) {
@@ -2622,6 +2620,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 67156b4a3a188..8acddde4f8eb6 100644
--- a/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.h
+++ b/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.h
@@ -236,6 +236,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 180dbb7a78650..a04892e2db541 100644
--- a/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp
+++ b/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp
@@ -2955,11 +2955,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 a9972c03f7430..302ffc0f05972 100644
--- a/llvm/test/MC/AMDGPU/gfx12_err.s
+++ b/llvm/test/MC/AMDGPU/gfx12_err.s
@@ -127,259 +127,259 @@ s_alloc_vgpr vcc
 // 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
+// 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]



More information about the llvm-commits mailing list