[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