2 changes: 1 addition & 1 deletion llvm/test/CodeGen/AMDGPU/vgpr-liverange-ir.ll
Original file line number Diff line number Diff line change
Expand Up @@ -570,7 +570,7 @@ define protected amdgpu_kernel void @nested_waterfalls(ptr addrspace(1) %tex.coe
; SI-NEXT: bb.1.if.then:
; SI-NEXT: successors: %bb.2(0x80000000)
; SI-NEXT: {{ $}}
; SI-NEXT: early-clobber %10:sreg_64_xexec = S_LOAD_DWORDX2_IMM_ec killed [[COPY]](p4), 36, 0 :: (dereferenceable invariant load (s64) from %ir.tex.coerce.kernarg.offset, align 4, addrspace 4)
; SI-NEXT: early-clobber %10:sreg_64_xexec_xnull = S_LOAD_DWORDX2_IMM_ec killed [[COPY]](p4), 36, 0 :: (dereferenceable invariant load (s64) from %ir.tex.coerce.kernarg.offset, align 4, addrspace 4)
; SI-NEXT: [[V_LSHLREV_B32_e64_:%[0-9]+]]:vgpr_32 = nuw nsw V_LSHLREV_B32_e64 3, killed [[COPY1]](s32), implicit $exec
; SI-NEXT: [[GLOBAL_LOAD_DWORDX2_SADDR:%[0-9]+]]:vreg_64 = GLOBAL_LOAD_DWORDX2_SADDR killed %10, killed [[V_LSHLREV_B32_e64_]], 0, 0, implicit $exec :: (load (s64) from %ir.idx, addrspace 1)
; SI-NEXT: [[GLOBAL_LOAD_DWORDX4_:%[0-9]+]]:vreg_128 = GLOBAL_LOAD_DWORDX4 [[GLOBAL_LOAD_DWORDX2_SADDR]], 16, 0, implicit $exec :: (invariant load (s128) from %ir.3 + 16, addrspace 4)
Expand Down
5 changes: 2 additions & 3 deletions llvm/test/MC/AMDGPU/flat-global.s
Original file line number Diff line number Diff line change
Expand Up @@ -210,10 +210,9 @@ global_store_dword v3, v1, s[2:3] offset:-8
// GFX9: global_store_dword v3, v1, s[2:3] offset:-8 ; encoding: [0xf8,0x9f,0x70,0xdc,0x03,0x01,0x02,0x00]
// VI-ERR: :[[@LINE-3]]:1: error: instruction not supported on this GPU

// XXX: Is this valid?
global_store_dword v3, v1, exec
// GFX10: encoding: [0x00,0x80,0x70,0xdc,0x03,0x01,0x7e,0x00]
// GFX9: global_store_dword v3, v1, exec ; encoding: [0x00,0x80,0x70,0xdc,0x03,0x01,0x7e,0x00]
// GFX10-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
// GFX9-ERR: :[[@LINE-2]]:{{[0-9]+}}: error: invalid operand for instruction
// VI-ERR: :[[@LINE-3]]:{{[0-9]+}}: error: instruction not supported on this GPU

global_load_dword v1, v[3:4], s2
Expand Down
268 changes: 268 additions & 0 deletions llvm/test/MC/AMDGPU/gfx10_flat_instructions_err.s
Original file line number Diff line number Diff line change
@@ -0,0 +1,268 @@
// RUN: not llvm-mc -triple=amdgcn -mcpu=gfx1010 %s 2>&1 | FileCheck --check-prefixes=GFX1010,GFX10 --implicit-check-not=error: %s
// RUN: not llvm-mc -triple=amdgcn -mcpu=gfx1030 %s 2>&1 | FileCheck --check-prefixes=GFX1030,GFX10 --implicit-check-not=error: %s

global_atomic_add v2, v4, null
// GFX10: :[[@LINE-1]]:27: error: invalid operand for instruction

global_atomic_add v0, v2, v4, null glc
// GFX10: :[[@LINE-1]]:31: error: invalid operand for instruction

global_atomic_add_x2 v2, v[4:5], null
// GFX10: :[[@LINE-1]]:34: error: invalid operand for instruction

global_atomic_add_x2 v[0:1], v2, v[4:5], null
// GFX10: :[[@LINE-1]]:42: error: invalid operand for instruction

global_atomic_and v2, v4, null
// GFX10: :[[@LINE-1]]:27: error: invalid operand for instruction

global_atomic_and v0, v2, v4, null
// GFX10: :[[@LINE-1]]:31: error: invalid operand for instruction

global_atomic_and_x2 v2, v[4:5], null
// GFX10: :[[@LINE-1]]:34: error: invalid operand for instruction

global_atomic_and_x2 v0, v2, v[4:5], null
// GFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction

global_atomic_cmpswap v2, v[4:5], null
// GFX10: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_cmpswap v0, v2, v[4:5], null
// GFX10: :[[@LINE-1]]:39: error: invalid operand for instruction

global_atomic_cmpswap_x2 v2, v[4:7], null
// GFX10: :[[@LINE-1]]:38: error: invalid operand for instruction

global_atomic_cmpswap_x2 v[0:1], v2, v[4:7], null
// GFX10: :[[@LINE-1]]:46: error: invalid operand for instruction

global_atomic_csub v2, v4, null
// GFX1010: :[[@LINE-1]]:{{[0-9]+}}: error: instruction not supported on this GPU
// GFX1030: :[[@LINE-2]]:28: error: invalid operand for instruction

global_atomic_csub v0, v2, v4, null
// GFX1010: :[[@LINE-1]]:{{[0-9]+}}: error: instruction not supported on this GPU
// GFX1030: :[[@LINE-2]]:32: error: invalid operand for instruction

global_atomic_dec v2, v4, null
// GFX10: :[[@LINE-1]]:27: error: invalid operand for instruction

global_atomic_dec v0, v2, v4, null
// GFX10: :[[@LINE-1]]:31: error: invalid operand for instruction

global_atomic_dec_x2 v2, v[4:5], null
// GFX10: :[[@LINE-1]]:34: error: invalid operand for instruction

global_atomic_dec_x2 v[0:1], v2, v[4:5], null
// GFX10: :[[@LINE-1]]:42: error: invalid operand for instruction

global_atomic_fcmpswap v2, v[4:5], null
// GFX10: :[[@LINE-1]]:36: error: invalid operand for instruction

global_atomic_fcmpswap v0, v2, v[4:5], null
// GFX10: :[[@LINE-1]]:40: error: invalid operand for instruction

global_atomic_fcmpswap_x2 v2, v[4:7], null
// GFX10: :[[@LINE-1]]:39: error: invalid operand for instruction

global_atomic_fcmpswap_x2 v[0:1], v2, v[4:7], null
// GFX10: :[[@LINE-1]]:47: error: invalid operand for instruction

global_atomic_fmax v2, v4, null
// GFX10: :[[@LINE-1]]:28: error: invalid operand for instruction

global_atomic_fmax v0, v2, v4, null
// GFX10: :[[@LINE-1]]:32: error: invalid operand for instruction

global_atomic_fmax_x2 v2, v[4:5], null
// GFX10: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_fmax_x2 v[0:1], v2, v[4:5], null
// GFX10: :[[@LINE-1]]:43: error: invalid operand for instruction

global_atomic_fmin v2, v4, null
// GFX10: :[[@LINE-1]]:28: error: invalid operand for instruction

global_atomic_fmin v0, v2, v4, null
// GFX10: :[[@LINE-1]]:32: error: invalid operand for instruction

global_atomic_fmin_x2 v2, v[4:5], null
// GFX10: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_fmin_x2 v[0:1], v2, v[4:5], null
// GFX10: :[[@LINE-1]]:43: error: invalid operand for instruction

global_atomic_inc v2, v4, null
// GFX10: :[[@LINE-1]]:27: error: invalid operand for instruction

global_atomic_inc v0, v2, v4, null
// GFX10: :[[@LINE-1]]:31: error: invalid operand for instruction

global_atomic_inc_x2 v2, v[4:5], null
// GFX10: :[[@LINE-1]]:34: error: invalid operand for instruction

global_atomic_inc_x2 v[0:1], v2, v[4:5], null
// GFX10: :[[@LINE-1]]:42: error: invalid operand for instruction

global_atomic_or v2, v4, null
// GFX10: :[[@LINE-1]]:26: error: invalid operand for instruction

global_atomic_or v0, v2, v4, null
// GFX10: :[[@LINE-1]]:30: error: invalid operand for instruction

global_atomic_or_x2 v2, v[4:5], null
// GFX10: :[[@LINE-1]]:33: error: invalid operand for instruction

global_atomic_or_x2 v[0:1], v2, v[4:5], null
// GFX10: :[[@LINE-1]]:41: error: invalid operand for instruction

global_atomic_smax v2, v4, null
// GFX10: :[[@LINE-1]]:28: error: invalid operand for instruction

global_atomic_smax v0, v2, v4, null
// GFX10: :[[@LINE-1]]:32: error: invalid operand for instruction

global_atomic_smax_x2 v2, v[4:5], null
// GFX10: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_smax_x2 v[0:1], v2, v[4:5], null
// GFX10: :[[@LINE-1]]:43: error: invalid operand for instruction

global_atomic_smin v2, v4, null
// GFX10: :[[@LINE-1]]:28: error: invalid operand for instruction

global_atomic_smin v0, v2, v4, null
// GFX10: :[[@LINE-1]]:32: error: invalid operand for instruction

global_atomic_smin_x2 v2, v[4:5], null
// GFX10: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_smin_x2 v[0:1], v2, v[4:5], null
// GFX10: :[[@LINE-1]]:43: error: invalid operand for instruction

global_atomic_sub v2, v4, null
// GFX10: :[[@LINE-1]]:27: error: invalid operand for instruction

global_atomic_sub v0, v2, v4, null
// GFX10: :[[@LINE-1]]:31: error: invalid operand for instruction

global_atomic_sub_x2 v2, v[4:5], null
// GFX10: :[[@LINE-1]]:34: error: invalid operand for instruction

global_atomic_sub_x2 v[0:1], v2, v[4:5], null
// GFX10: :[[@LINE-1]]:42: error: invalid operand for instruction

global_atomic_swap v2, v4, null
// GFX10: :[[@LINE-1]]:28: error: invalid operand for instruction

global_atomic_swap v0, v2, v4, null
// GFX10: :[[@LINE-1]]:32: error: invalid operand for instruction

global_atomic_swap_x2 v2, v[4:5], null
// GFX10: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_swap_x2 v[0:1], v2, v[4:5], null
// GFX10: :[[@LINE-1]]:43: error: invalid operand for instruction

global_atomic_umax v2, v4, null
// GFX10: :[[@LINE-1]]:28: error: invalid operand for instruction

global_atomic_umax v0, v2, v4, null
// GFX10: :[[@LINE-1]]:32: error: invalid operand for instruction

global_atomic_umax_x2 v2, v[4:5], null
// GFX10: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_umax_x2 v[0:1], v2, v[4:5], null
// GFX10: :[[@LINE-1]]:43: error: invalid operand for instruction

global_atomic_umin v2, v4, null
// GFX10: :[[@LINE-1]]:28: error: invalid operand for instruction

global_atomic_umin v0, v2, v4, null
// GFX10: :[[@LINE-1]]:32: error: invalid operand for instruction

global_atomic_umin_x2 v2, v[4:5], null
// GFX10: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_umin_x2 v[0:1], v2, v[4:5], null
// GFX10: :[[@LINE-1]]:43: error: invalid operand for instruction

global_atomic_xor v2, v4, null
// GFX10: :[[@LINE-1]]:27: error: invalid operand for instruction

global_atomic_xor v0, v2, v4, null
// GFX10: :[[@LINE-1]]:31: error: invalid operand for instruction

global_atomic_xor_x2 v2, v[4:5], null
// GFX10: :[[@LINE-1]]:34: error: invalid operand for instruction

global_atomic_xor_x2 v[0:1], v2, v[4:5], null
// GFX10: :[[@LINE-1]]:42: error: invalid operand for instruction

global_load_dword v0, v4, null
// GFX10: :[[@LINE-1]]:27: error: invalid operand for instruction

global_load_dwordx2 v[0:1], v4, null
// GFX10: :[[@LINE-1]]:33: error: invalid operand for instruction

global_load_dwordx3 v[0:2], v4, null
// GFX10: :[[@LINE-1]]:33: error: invalid operand for instruction

global_load_dwordx4 v[0:3], v4, null
// GFX10: :[[@LINE-1]]:33: error: invalid operand for instruction

global_load_sbyte v0, v2, null
// GFX10: :[[@LINE-1]]:27: error: invalid operand for instruction

global_load_sbyte_d16 v0, v2, null
// GFX10: :[[@LINE-1]]:31: error: invalid operand for instruction

global_load_sbyte_d16_hi v0, v2, null
// GFX10: :[[@LINE-1]]:34: error: invalid operand for instruction

global_load_short_d16 v0, v2, null
// GFX10: :[[@LINE-1]]:31: error: invalid operand for instruction

global_load_short_d16_hi v0, v2, null
// GFX10: :[[@LINE-1]]:34: error: invalid operand for instruction

global_load_sshort v0, v2, null
// GFX10: :[[@LINE-1]]:28: error: invalid operand for instruction

global_load_ubyte v0, v2, null
// GFX10: :[[@LINE-1]]:27: error: invalid operand for instruction

global_load_ubyte_d16 v0, v2, null
// GFX10: :[[@LINE-1]]:31: error: invalid operand for instruction

global_load_ubyte_d16_hi v0, v2, null
// GFX10: :[[@LINE-1]]:34: error: invalid operand for instruction

global_load_ushort v0, v2, null
// GFX10: :[[@LINE-1]]:28: error: invalid operand for instruction

global_store_byte v0, v2, null
// GFX10: :[[@LINE-1]]:27: error: invalid operand for instruction

global_store_byte_d16_hi v0, v2, null
// GFX10: :[[@LINE-1]]:34: error: invalid operand for instruction

global_store_dword v0, v2, null
// GFX10: :[[@LINE-1]]:28: error: invalid operand for instruction

global_store_dwordx2 v0, v[2:3], null
// GFX10: :[[@LINE-1]]:34: error: invalid operand for instruction

global_store_dwordx3 v0, v[2:4], null
// GFX10: :[[@LINE-1]]:34: error: invalid operand for instruction

global_store_dwordx4 v0, v[2:5], null
// GFX10: :[[@LINE-1]]:34: error: invalid operand for instruction

global_store_short v0, v2, null
// GFX10: :[[@LINE-1]]:28: error: invalid operand for instruction

global_store_short_d16_hi v0, v2, null
// GFX10: :[[@LINE-1]]:35: error: invalid operand for instruction
253 changes: 253 additions & 0 deletions llvm/test/MC/AMDGPU/gfx11_flat_instructions_err.s
Original file line number Diff line number Diff line change
@@ -0,0 +1,253 @@
// RUN: not llvm-mc -triple=amdgcn -mcpu=gfx1100 %s 2>&1 | FileCheck --check-prefixes=GFX11 --implicit-check-not=error: %s

global_atomic_add_f32 v0, v2, null
// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction

global_atomic_add_f32 v0, v2, v4, null glc
// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction

global_atomic_add_u32 v0, v2, null
// GFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction

global_atomic_add_u32 v0, v2, v4, null glc
// GFX11: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_add_u64 v0, v[2:3], null
// GFX11: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_add_u64 v[0:1], v2, v[4:5], null
// GFX11: :[[@LINE-1]]:43: error: invalid operand for instruction

global_atomic_and_b32 v0, v2, null
// GFX11: :[[@LINE-1]]:31: error: invalid operand for instruction

global_atomic_and_b32 v0, v2, v4, null
// GFX11: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_and_b64 v0, v[2:3], null
// GFX11: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_and_b64 v[0:1], v2, v[4:5], null
// GFX11: :[[@LINE-1]]:43: error: invalid operand for instruction

global_atomic_cmpswap_b32 v0, v[2:3], null
// GFX11: :[[@LINE-1]]:39: error: invalid operand for instruction

global_atomic_cmpswap_b32 v0, v2, v[4:5], null
// GFX11: :[[@LINE-1]]:43: error: invalid operand for instruction

global_atomic_cmpswap_b64 v0, v[2:5], null
// GFX11: :[[@LINE-1]]:39: error: invalid operand for instruction

global_atomic_cmpswap_b64 v[0:1], v2, v[4:7], null
// GFX11: :[[@LINE-1]]:47: error: invalid operand for instruction

global_atomic_cmpswap_f32 v0, v[2:3], null
// GFX11: :[[@LINE-1]]:39: error: invalid operand for instruction

global_atomic_cmpswap_f32 v0, v2, v[4:5], null
// GFX11: :[[@LINE-1]]:43: error: invalid operand for instruction

global_atomic_csub_u32 v0, v2, null
// GFX11: :[[@LINE-1]]:32: error: invalid operand for instruction

global_atomic_csub_u32 v0, v2, v4, null
// GFX11: :[[@LINE-1]]:36: error: invalid operand for instruction

global_atomic_dec_u32 v0, v2, null
// GFX11: :[[@LINE-1]]:31: error: invalid operand for instruction

global_atomic_dec_u32 v0, v2, v4, null
// GFX11: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_dec_u64 v0, v[2:3], null
// GFX11: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_dec_u64 v[0:1], v2, v[4:5], null
// GFX11: :[[@LINE-1]]:43: error: invalid operand for instruction

global_atomic_inc_u32 v0, v2, null
// GFX11: :[[@LINE-1]]:31: error: invalid operand for instruction

global_atomic_inc_u32 v0, v2, v4, null
// GFX11: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_inc_u64 v0, v[2:3], null
// GFX11: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_inc_u64 v[0:1], v2, v[4:5], null
// GFX11: :[[@LINE-1]]:43: error: invalid operand for instruction

global_atomic_max_f32 v0, v2, null
// GFX11: :[[@LINE-1]]:31: error: invalid operand for instruction

global_atomic_max_f32 v0, v2, v4, null
// GFX11: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_max_i32 v0, v2, null
// GFX11: :[[@LINE-1]]:31: error: invalid operand for instruction

global_atomic_max_i32 v0, v2, v4, null
// GFX11: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_max_i64 v0, v[2:3], null
// GFX11: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_max_i64 v[0:1], v2, v[4:5], null
// GFX11: :[[@LINE-1]]:43: error: invalid operand for instruction

global_atomic_max_u32 v0, v2, null
// GFX11: :[[@LINE-1]]:31: error: invalid operand for instruction

global_atomic_max_u32 v0, v2, v4, null
// GFX11: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_max_u64 v0, v[2:3], null
// GFX11: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_max_u64 v[0:1], v2, v[4:5], null
// GFX11: :[[@LINE-1]]:43: error: invalid operand for instruction

global_atomic_min_f32 v0, v2, v4, null
// GFX11: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_min_f32 v0, v2, null
// GFX11: :[[@LINE-1]]:31: error: invalid operand for instruction

global_atomic_min_i32 v0, v2, v4, null
// GFX11: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_min_i32 v0, v2, null
// GFX11: :[[@LINE-1]]:31: error: invalid operand for instruction

global_atomic_min_i64 v0, v[2:3], null
// GFX11: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_min_i64 v[0:1], v2, v[4:5], null
// GFX11: :[[@LINE-1]]:43: error: invalid operand for instruction

global_atomic_min_u32 v0, v2, null
// GFX11: :[[@LINE-1]]:31: error: invalid operand for instruction

global_atomic_min_u32 v0, v2, v4, null
// GFX11: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_min_u64 v0, v[2:3], null
// GFX11: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_min_u64 v[0:1], v2, v[4:5], null
// GFX11: :[[@LINE-1]]:43: error: invalid operand for instruction

global_atomic_or_b32 v0, v2, null
// GFX11: :[[@LINE-1]]:30: error: invalid operand for instruction

global_atomic_or_b32 v0, v2, v4, null
// GFX11: :[[@LINE-1]]:34: error: invalid operand for instruction

global_atomic_or_b64 v0, v[2:3], null
// GFX11: :[[@LINE-1]]:34: error: invalid operand for instruction

global_atomic_or_b64 v[0:1], v2, v[4:5], null
// GFX11: :[[@LINE-1]]:42: error: invalid operand for instruction

global_atomic_sub_u32 v0, v2, null
// GFX11: :[[@LINE-1]]:31: error: invalid operand for instruction

global_atomic_sub_u32 v0, v2, v4, null
// GFX11: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_sub_u64 v0, v[2:3], null
// GFX11: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_sub_u64 v[0:1], v2, v[4:5], null
// GFX11: :[[@LINE-1]]:43: error: invalid operand for instruction

global_atomic_swap_b32 v0, v2, null
// GFX11: :[[@LINE-1]]:32: error: invalid operand for instruction

global_atomic_swap_b32 v0, v2, v4, null
// GFX11: :[[@LINE-1]]:36: error: invalid operand for instruction

global_atomic_swap_b64 v0, v[2:3], null
// GFX11: :[[@LINE-1]]:36: error: invalid operand for instruction

global_atomic_swap_b64 v[0:1], v2, v[4:5], null
// GFX11: :[[@LINE-1]]:44: error: invalid operand for instruction

global_atomic_xor_b32 v0, v2, null
// GFX11: :[[@LINE-1]]:31: error: invalid operand for instruction

global_atomic_xor_b32 v0, v2, v4, null
// GFX11: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_xor_b64 v0, v[2:3], null
// GFX11: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_xor_b64 v[0:1], v2, v[4:5], null
// GFX11: :[[@LINE-1]]:43: error: invalid operand for instruction

global_load_b128 v[0:3], v4, null
// GFX11: :[[@LINE-1]]:30: error: invalid operand for instruction

global_load_b32 v0, v4, null
// GFX11: :[[@LINE-1]]:25: error: invalid operand for instruction

global_load_b64 v[0:1], v4, null
// GFX11: :[[@LINE-1]]:29: error: invalid operand for instruction

global_load_b96 v[0:2], v4, null
// GFX11: :[[@LINE-1]]:29: error: invalid operand for instruction

global_load_d16_b16 v0, v2, null
// GFX11: :[[@LINE-1]]:29: error: invalid operand for instruction

global_load_d16_hi_b16 v0, v2, null
// GFX11: :[[@LINE-1]]:32: error: invalid operand for instruction

global_load_d16_hi_i8 v0, v2, null
// GFX11: :[[@LINE-1]]:31: error: invalid operand for instruction

global_load_d16_hi_u8 v0, v2, null
// GFX11: :[[@LINE-1]]:31: error: invalid operand for instruction

global_load_d16_i8 v0, v2, null
// GFX11: :[[@LINE-1]]:28: error: invalid operand for instruction

global_load_d16_u8 v0, v2, null
// GFX11: :[[@LINE-1]]:28: error: invalid operand for instruction

global_load_i16 v0, v2, null
// GFX11: :[[@LINE-1]]:25: error: invalid operand for instruction

global_load_i8 v0, v2, null
// GFX11: :[[@LINE-1]]:24: error: invalid operand for instruction

global_load_u16 v0, v2, null
// GFX11: :[[@LINE-1]]:25: error: invalid operand for instruction

global_load_u8 v0, v2, null
// GFX11: :[[@LINE-1]]:24: error: invalid operand for instruction

global_store_b128 v0, v[2:5], null
// GFX11: :[[@LINE-1]]:31: error: invalid operand for instruction

global_store_b16 v0, v2, null
// GFX11: :[[@LINE-1]]:26: error: invalid operand for instruction

global_store_b32 v0, v2, null
// GFX11: :[[@LINE-1]]:26: error: invalid operand for instruction

global_store_b64 v0, v[2:3], null
// GFX11: :[[@LINE-1]]:30: error: invalid operand for instruction

global_store_b8 v0, v2, null
// GFX11: :[[@LINE-1]]:25: error: invalid operand for instruction

global_store_b96 v0, v[2:4], null
// GFX11: :[[@LINE-1]]:30: error: invalid operand for instruction

global_store_d16_hi_b16 v0, v2, null
// GFX11: :[[@LINE-1]]:33: error: invalid operand for instruction

global_store_d16_hi_b8 v0, v2, null
// GFX11: :[[@LINE-1]]:32: error: invalid operand for instruction
289 changes: 289 additions & 0 deletions llvm/test/MC/AMDGPU/gfx12_flat_instructions_err.s
Original file line number Diff line number Diff line change
@@ -0,0 +1,289 @@
// RUN: not llvm-mc -triple=amdgcn -mcpu=gfx1200 %s 2>&1 | FileCheck --check-prefixes=GFX12 --implicit-check-not=error: %s

global_atomic_add_f32 v0, v2, null
// GFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction

global_atomic_add_f32 v0, v2, v4, null glc
// GFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction

global_atomic_add_u32 v0, v2, null
// GFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction

global_atomic_add_u32 v0, v2, v4, null glc
// GFX12: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_add_u64 v0, v[2:3], null
// GFX12: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_add_u64 v[0:1], v2, v[4:5], null
// GFX12: :[[@LINE-1]]:43: error: invalid operand for instruction

global_atomic_and_b32 v0, v2, null
// GFX12: :[[@LINE-1]]:31: error: invalid operand for instruction

global_atomic_and_b32 v0, v2, v4, null
// GFX12: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_and_b64 v0, v[2:3], null
// GFX12: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_and_b64 v[0:1], v2, v[4:5], null
// GFX12: :[[@LINE-1]]:43: error: invalid operand for instruction

global_atomic_cmpswap_b32 v0, v[2:3], null
// GFX12: :[[@LINE-1]]:39: error: invalid operand for instruction

global_atomic_cmpswap_b32 v0, v2, v[4:5], null
// GFX12: :[[@LINE-1]]:43: error: invalid operand for instruction

global_atomic_cmpswap_b64 v0, v[2:5], null
// GFX12: :[[@LINE-1]]:39: error: invalid operand for instruction

global_atomic_cmpswap_b64 v[0:1], v2, v[4:7], null
// GFX12: :[[@LINE-1]]:47: error: invalid operand for instruction

global_atomic_cond_sub_u32 v0, v2, null
// GFX12: :[[@LINE-1]]:36: error: invalid operand for instruction

global_atomic_cond_sub_u32 v0, v2, v4, null
// GFX12: :[[@LINE-1]]:40: error: invalid operand for instruction

global_atomic_dec_u32 v0, v2, null
// GFX12: :[[@LINE-1]]:31: error: invalid operand for instruction

global_atomic_dec_u32 v0, v2, v4, null
// GFX12: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_dec_u64 v0, v[2:3], null
// GFX12: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_dec_u64 v[0:1], v2, v[4:5], null
// GFX12: :[[@LINE-1]]:43: error: invalid operand for instruction

global_atomic_inc_u32 v0, v2, null
// GFX12: :[[@LINE-1]]:31: error: invalid operand for instruction

global_atomic_inc_u32 v0, v2, v4, null
// GFX12: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_inc_u64 v0, v[2:3], null
// GFX12: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_inc_u64 v[0:1], v2, v[4:5], null
// GFX12: :[[@LINE-1]]:43: error: invalid operand for instruction

global_atomic_max_i32 v0, v2, null
// GFX12: :[[@LINE-1]]:31: error: invalid operand for instruction

global_atomic_max_i32 v0, v2, v4, null
// GFX12: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_max_i64 v0, v[2:3], null
// GFX12: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_max_i64 v[0:1], v2, v[4:5], null
// GFX12: :[[@LINE-1]]:43: error: invalid operand for instruction

global_atomic_max_num_f32 v0, v2, null
// GFX12: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_max_num_f32 v0, v2, v4, null
// GFX12: :[[@LINE-1]]:39: error: invalid operand for instruction

global_atomic_max_u32 v0, v2, null
// GFX12: :[[@LINE-1]]:31: error: invalid operand for instruction

global_atomic_max_u32 v0, v2, v4, null
// GFX12: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_max_u64 v0, v[2:3], null
// GFX12: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_max_u64 v[0:1], v2, v[4:5], null
// GFX12: :[[@LINE-1]]:43: error: invalid operand for instruction

global_atomic_min_i32 v0, v2, v4, null
// GFX12: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_min_i32 v0, v2, null
// GFX12: :[[@LINE-1]]:31: error: invalid operand for instruction

global_atomic_min_i64 v0, v[2:3], null
// GFX12: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_min_i64 v[0:1], v2, v[4:5], null
// GFX12: :[[@LINE-1]]:43: error: invalid operand for instruction

global_atomic_min_num_f32 v0, v2, null
// GFX12: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_min_num_f32 v0, v2, v4, null
// GFX12: :[[@LINE-1]]:39: error: invalid operand for instruction

global_atomic_min_u32 v0, v2, null
// GFX12: :[[@LINE-1]]:31: error: invalid operand for instruction

global_atomic_min_u32 v0, v2, v4, null
// GFX12: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_min_u64 v0, v[2:3], null
// GFX12: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_min_u64 v[0:1], v2, v[4:5], null
// GFX12: :[[@LINE-1]]:43: error: invalid operand for instruction

global_atomic_or_b32 v0, v2, null
// GFX12: :[[@LINE-1]]:30: error: invalid operand for instruction

global_atomic_or_b32 v0, v2, v4, null
// GFX12: :[[@LINE-1]]:34: error: invalid operand for instruction

global_atomic_or_b64 v0, v[2:3], null
// GFX12: :[[@LINE-1]]:34: error: invalid operand for instruction

global_atomic_or_b64 v[0:1], v2, v[4:5], null
// GFX12: :[[@LINE-1]]:42: error: invalid operand for instruction

global_atomic_ordered_add_b64 v0, v[2:3], null
// GFX12: :[[@LINE-1]]:43: error: invalid operand for instruction

global_atomic_ordered_add_b64 v[0:1], v2, v[4:5], null
// GFX12: :[[@LINE-1]]:51: error: invalid operand for instruction

global_atomic_pk_add_bf16 v0, v2, null
// GFX12: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_pk_add_bf16 v0, v2, v4, null
// GFX12: :[[@LINE-1]]:39: error: invalid operand for instruction

global_atomic_pk_add_f16 v0, v2, null
// GFX12: :[[@LINE-1]]:34: error: invalid operand for instruction

global_atomic_pk_add_f16 v0, v2, v4, null
// GFX12: :[[@LINE-1]]:38: error: invalid operand for instruction

global_atomic_sub_clamp_u32 v0, v2, null
// GFX12: :[[@LINE-1]]:37: error: invalid operand for instruction

global_atomic_sub_clamp_u32 v0, v2, v4, null
// GFX12: :[[@LINE-1]]:41: error: invalid operand for instruction

global_atomic_sub_u32 v0, v2, null
// GFX12: :[[@LINE-1]]:31: error: invalid operand for instruction

global_atomic_sub_u32 v0, v2, v4, null
// GFX12: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_sub_u64 v0, v[2:3], null
// GFX12: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_sub_u64 v[0:1], v2, v[4:5], null
// GFX12: :[[@LINE-1]]:43: error: invalid operand for instruction

global_atomic_swap_b32 v0, v2, null
// GFX12: :[[@LINE-1]]:32: error: invalid operand for instruction

global_atomic_swap_b32 v0, v2, v4, null
// GFX12: :[[@LINE-1]]:36: error: invalid operand for instruction

global_atomic_swap_b64 v0, v[2:3], null
// GFX12: :[[@LINE-1]]:36: error: invalid operand for instruction

global_atomic_swap_b64 v[0:1], v2, v[4:5], null
// GFX12: :[[@LINE-1]]:44: error: invalid operand for instruction

global_atomic_xor_b32 v0, v2, null
// GFX12: :[[@LINE-1]]:31: error: invalid operand for instruction

global_atomic_xor_b32 v0, v2, v4, null
// GFX12: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_xor_b64 v0, v[2:3], null
// GFX12: :[[@LINE-1]]:35: error: invalid operand for instruction

global_atomic_xor_b64 v[0:1], v2, v[4:5], null
// GFX12: :[[@LINE-1]]:43: error: invalid operand for instruction

global_load_b128 v[0:3], v4, null
// GFX12: :[[@LINE-1]]:30: error: invalid operand for instruction

global_load_b32 v0, v4, null
// GFX12: :[[@LINE-1]]:25: error: invalid operand for instruction

global_load_b64 v[0:1], v4, null
// GFX12: :[[@LINE-1]]:29: error: invalid operand for instruction

global_load_b96 v[0:2], v4, null
// GFX12: :[[@LINE-1]]:29: error: invalid operand for instruction

global_load_block v[0:31], v32, null
// GFX12: :[[@LINE-1]]:33: error: invalid operand for instruction

global_load_d16_b16 v0, v2, null
// GFX12: :[[@LINE-1]]:29: error: invalid operand for instruction

global_load_d16_hi_b16 v0, v2, null
// GFX12: :[[@LINE-1]]:32: error: invalid operand for instruction

global_load_d16_hi_i8 v0, v2, null
// GFX12: :[[@LINE-1]]:31: error: invalid operand for instruction

global_load_d16_hi_u8 v0, v2, null
// GFX12: :[[@LINE-1]]:31: error: invalid operand for instruction

global_load_d16_i8 v0, v2, null
// GFX12: :[[@LINE-1]]:28: error: invalid operand for instruction

global_load_d16_u8 v0, v2, null
// GFX12: :[[@LINE-1]]:28: error: invalid operand for instruction

global_load_i16 v0, v2, null
// GFX12: :[[@LINE-1]]:25: error: invalid operand for instruction

global_load_i8 v0, v2, null
// GFX12: :[[@LINE-1]]:24: error: invalid operand for instruction

global_load_tr_b128 v[0:3], v4, null
// GFX12: :[[@LINE-1]]:33: error: invalid operand for instruction

global_load_tr_b128 v[0:1], v4, null
// GFX12: :[[@LINE-1]]:33: error: invalid operand for instruction

global_load_tr_b64 v[0:1], v4, null
// GFX12: :[[@LINE-1]]:32: error: invalid operand for instruction

global_load_tr_b64 v0, v4, null
// GFX12: :[[@LINE-1]]:28: error: invalid operand for instruction

global_load_u16 v0, v2, null
// GFX12: :[[@LINE-1]]:25: error: invalid operand for instruction

global_load_u8 v0, v2, null
// GFX12: :[[@LINE-1]]:24: error: invalid operand for instruction

global_store_b128 v0, v[2:5], null
// GFX12: :[[@LINE-1]]:31: error: invalid operand for instruction

global_store_b16 v0, v2, null
// GFX12: :[[@LINE-1]]:26: error: invalid operand for instruction

global_store_b32 v0, v2, null
// GFX12: :[[@LINE-1]]:26: error: invalid operand for instruction

global_store_b64 v0, v[2:3], null
// GFX12: :[[@LINE-1]]:30: error: invalid operand for instruction

global_store_b8 v0, v2, null
// GFX12: :[[@LINE-1]]:25: error: invalid operand for instruction

global_store_b96 v0, v[2:4], null
// GFX12: :[[@LINE-1]]:30: error: invalid operand for instruction

global_store_block v32, v[0:31], null
// GFX12: :[[@LINE-1]]:34: error: invalid operand for instruction

global_store_d16_hi_b16 v0, v2, null
// GFX12: :[[@LINE-1]]:33: error: invalid operand for instruction

global_store_d16_hi_b8 v0, v2, null
// GFX12: :[[@LINE-1]]:32: error: invalid operand for instruction
3 changes: 0 additions & 3 deletions llvm/test/MC/Disassembler/AMDGPU/gfx10_flat.txt
Original file line number Diff line number Diff line change
Expand Up @@ -761,9 +761,6 @@
# GFX10: global_store_byte_d16_hi v[3:4], v1, off ; encoding: [0x00,0x80,0x64,0xdc,0x03,0x01,0x7d,0x00]
0x00,0x80,0x64,0xdc,0x03,0x01,0x7d,0x00

# GFX10: global_store_dword v3, v1, exec ; encoding: [0x00,0x80,0x70,0xdc,0x03,0x01,0x7e,0x00]
0x00,0x80,0x70,0xdc,0x03,0x01,0x7e,0x00

# GFX10: global_store_dword v[3:4], v1, off ; encoding: [0x00,0x80,0x70,0xdc,0x03,0x01,0x7d,0x00]
0x00,0x80,0x70,0xdc,0x03,0x01,0x7d,0x00

Expand Down