blob: 639fe3d2de92882b078291905ca8a57d4236c7ee [file] [log] [blame]
// RUN: not llvm-mc -arch=amdgcn -mcpu=gfx1010 -mattr=+WavefrontSize32,-WavefrontSize64 %s 2>&1 | FileCheck %s --implicit-check-not=error: --strict-whitespace
//==============================================================================
// destination must be different than all sources
v_mqsad_pk_u16_u8 v[0:1], v[1:2], v9, v[4:5]
// CHECK: error: destination must be different than all sources
// CHECK-NEXT:{{^}}v_mqsad_pk_u16_u8 v[0:1], v[1:2], v9, v[4:5]
// CHECK-NEXT:{{^}} ^
v_mqsad_pk_u16_u8 v[0:1], v[2:3], v0, v[4:5]
// CHECK: error: destination must be different than all sources
// CHECK-NEXT:{{^}}v_mqsad_pk_u16_u8 v[0:1], v[2:3], v0, v[4:5]
// CHECK-NEXT:{{^}} ^
v_mqsad_pk_u16_u8 v[0:1], v[2:3], v1, v[4:5]
// CHECK: error: destination must be different than all sources
// CHECK-NEXT:{{^}}v_mqsad_pk_u16_u8 v[0:1], v[2:3], v1, v[4:5]
// CHECK-NEXT:{{^}} ^
v_mqsad_pk_u16_u8 v[0:1], v[2:3], v9, v[0:1]
// CHECK: error: destination must be different than all sources
// CHECK-NEXT:{{^}}v_mqsad_pk_u16_u8 v[0:1], v[2:3], v9, v[0:1]
// CHECK-NEXT:{{^}} ^
//==============================================================================
// dim modifier is required on this GPU
image_atomic_add v252, v2, s[8:15]
// CHECK: error: dim modifier is required on this GPU
// CHECK-NEXT:{{^}}image_atomic_add v252, v2, s[8:15]
// CHECK-NEXT:{{^}}^
//==============================================================================
// duplicate data format
tbuffer_store_format_xyzw v[1:4], off, ttmp[4:7], s0 format:[BUF_DATA_FORMAT_32,BUF_DATA_FORMAT_8]
// CHECK: error: duplicate data format
// CHECK-NEXT:{{^}}tbuffer_store_format_xyzw v[1:4], off, ttmp[4:7], s0 format:[BUF_DATA_FORMAT_32,BUF_DATA_FORMAT_8]
// CHECK-NEXT:{{^}} ^
//==============================================================================
// duplicate numeric format
tbuffer_store_format_xyzw v[1:4], off, ttmp[4:7], s0 format:[BUF_NUM_FORMAT_UINT,BUF_NUM_FORMAT_FLOAT]
// CHECK: error: duplicate numeric format
// CHECK-NEXT:{{^}}tbuffer_store_format_xyzw v[1:4], off, ttmp[4:7], s0 format:[BUF_NUM_FORMAT_UINT,BUF_NUM_FORMAT_FLOAT]
// CHECK-NEXT:{{^}} ^
//==============================================================================
// expected ')' in parentheses expression
v_bfe_u32 v0, 1+(100, v1, v2
// CHECK: error: expected ')' in parentheses expression
// CHECK-NEXT:{{^}}v_bfe_u32 v0, 1+(100, v1, v2
// CHECK-NEXT:{{^}} ^
//==============================================================================
// expected a 12-bit signed offset
global_load_dword v1, v[3:4] off, offset:-4097
// CHECK: error: expected a 12-bit signed offset
// CHECK-NEXT:{{^}}global_load_dword v1, v[3:4] off, offset:-4097
// CHECK-NEXT:{{^}} ^
scratch_load_dword v0, v1, off offset:-2049 glc slc
// CHECK: error: expected a 12-bit signed offset
// CHECK-NEXT:{{^}}scratch_load_dword v0, v1, off offset:-2049 glc slc
// CHECK-NEXT:{{^}} ^
//==============================================================================
// expected a 16-bit signed jump offset
s_branch 0x10000
// CHECK: error: expected a 16-bit signed jump offset
// CHECK-NEXT:{{^}}s_branch 0x10000
// CHECK-NEXT:{{^}} ^
//==============================================================================
// expected a 2-bit lane id
ds_swizzle_b32 v8, v2 offset:swizzle(QUAD_PERM, 4, 1, 2, 3)
// CHECK: error: expected a 2-bit lane id
// CHECK-NEXT:{{^}}ds_swizzle_b32 v8, v2 offset:swizzle(QUAD_PERM, 4, 1, 2, 3)
// CHECK-NEXT:{{^}} ^
//==============================================================================
// expected a 20-bit unsigned offset
s_atc_probe_buffer 0x1, s[8:11], -1
// CHECK: error: expected a 20-bit unsigned offset
// CHECK-NEXT:{{^}}s_atc_probe_buffer 0x1, s[8:11], -1
// CHECK-NEXT:{{^}} ^
s_atc_probe_buffer 0x1, s[8:11], 0xFFFFFFFFFFF00000
// CHECK: error: expected a 20-bit unsigned offset
// CHECK-NEXT:{{^}}s_atc_probe_buffer 0x1, s[8:11], 0xFFFFFFFFFFF00000
// CHECK-NEXT:{{^}} ^
s_buffer_atomic_swap s5, s[4:7], 0x1FFFFF
// CHECK: error: expected a 20-bit unsigned offset
// CHECK-NEXT:{{^}}s_buffer_atomic_swap s5, s[4:7], 0x1FFFFF
// CHECK-NEXT:{{^}} ^
//==============================================================================
// expected a 21-bit signed offset
s_atc_probe 0x7, s[4:5], 0x1FFFFF
// CHECK: error: expected a 21-bit signed offset
// CHECK-NEXT:{{^}}s_atc_probe 0x7, s[4:5], 0x1FFFFF
// CHECK-NEXT:{{^}} ^
s_atomic_swap s5, s[2:3], 0x1FFFFF
// CHECK: error: expected a 21-bit signed offset
// CHECK-NEXT:{{^}}s_atomic_swap s5, s[2:3], 0x1FFFFF
// CHECK-NEXT:{{^}} ^
//==============================================================================
// expected a 2-bit value
v_mov_b32_dpp v5, v1 quad_perm:[3,2,1,4] row_mask:0x0 bank_mask:0x0
// CHECK: error: expected a 2-bit value
// CHECK-NEXT:{{^}}v_mov_b32_dpp v5, v1 quad_perm:[3,2,1,4] row_mask:0x0 bank_mask:0x0
// CHECK-NEXT:{{^}} ^
v_mov_b32_dpp v5, v1 quad_perm:[3,-1,1,3] row_mask:0x0 bank_mask:0x0
// CHECK: error: expected a 2-bit value
// CHECK-NEXT:{{^}}v_mov_b32_dpp v5, v1 quad_perm:[3,-1,1,3] row_mask:0x0 bank_mask:0x0
// CHECK-NEXT:{{^}} ^
//==============================================================================
// expected a 3-bit value
v_mov_b32_dpp v5, v1 dpp8:[-1,1,2,3,4,5,6,7]
// CHECK: error: expected a 3-bit value
// CHECK-NEXT:{{^}}v_mov_b32_dpp v5, v1 dpp8:[-1,1,2,3,4,5,6,7]
// CHECK-NEXT:{{^}} ^
v_mov_b32_dpp v5, v1 dpp8:[0,1,2,8,4,5,6,7]
// CHECK: error: expected a 3-bit value
// CHECK-NEXT:{{^}}v_mov_b32_dpp v5, v1 dpp8:[0,1,2,8,4,5,6,7]
// CHECK-NEXT:{{^}} ^
//==============================================================================
// expected a 5-character mask
ds_swizzle_b32 v8, v2 offset:swizzle(BITMASK_PERM, "ppii")
// CHECK: error: expected a 5-character mask
// CHECK-NEXT:{{^}}ds_swizzle_b32 v8, v2 offset:swizzle(BITMASK_PERM, "ppii")
// CHECK-NEXT:{{^}} ^
//==============================================================================
// expected a closing parentheses
ds_swizzle_b32 v8, v2 offset:swizzle(QUAD_PERM, 0, 1, 2, 3
// CHECK: error: expected a closing parentheses
// CHECK-NEXT:{{^}}ds_swizzle_b32 v8, v2 offset:swizzle(QUAD_PERM, 0, 1, 2, 3
// CHECK-NEXT:{{^}} ^
ds_swizzle_b32 v8, v2 offset:swizzle(QUAD_PERM, 0, 1, 2, 3, 4)
// CHECK: error: expected a closing parentheses
// CHECK-NEXT:{{^}}ds_swizzle_b32 v8, v2 offset:swizzle(QUAD_PERM, 0, 1, 2, 3, 4)
// CHECK-NEXT:{{^}} ^
//==============================================================================
// expected a closing parenthesis
s_sendmsg sendmsg(2, 2, 0, 0)
// CHECK: error: expected a closing parenthesis
// CHECK-NEXT:{{^}}s_sendmsg sendmsg(2, 2, 0, 0)
// CHECK-NEXT:{{^}} ^
s_waitcnt vmcnt(0
// CHECK: error: expected a closing parenthesis
// CHECK-NEXT:{{^}}s_waitcnt vmcnt(0
// CHECK-NEXT:{{^}} ^
//==============================================================================
// expected a closing square bracket
s_mov_b32 s1, s[0 1
// CHECK: error: expected a closing square bracket
// CHECK-NEXT:{{^}}s_mov_b32 s1, s[0 1
// CHECK-NEXT:{{^}} ^
s_mov_b32 s1, s[0 s0
// CHECK: error: expected a closing square bracket
// CHECK-NEXT:{{^}}s_mov_b32 s1, s[0 s0
// CHECK-NEXT:{{^}} ^
tbuffer_store_format_xyzw v[1:4], off, ttmp[4:7], s0 format:[BUF_DATA_FORMAT_32,BUF_NUM_FORMAT_FLOAT,BUF_DATA_FORMAT_8]
// CHECK: error: expected a closing square bracket
// CHECK-NEXT:{{^}}tbuffer_store_format_xyzw v[1:4], off, ttmp[4:7], s0 format:[BUF_DATA_FORMAT_32,BUF_NUM_FORMAT_FLOAT,BUF_DATA_FORMAT_8]
// CHECK-NEXT:{{^}} ^
tbuffer_store_format_xyzw v[1:4], off, ttmp[4:7], s0 format:[BUF_NUM_FORMAT_UINT
// CHECK: error: expected a closing square bracket
// CHECK-NEXT:{{^}}tbuffer_store_format_xyzw v[1:4], off, ttmp[4:7], s0 format:[BUF_NUM_FORMAT_UINT
// CHECK-NEXT:{{^}} ^
v_max3_f16 v5, v1, v2, v3 op_sel:[1,1,1,1 1
// CHECK: error: expected a closing square bracket
// CHECK-NEXT:{{^}}v_max3_f16 v5, v1, v2, v3 op_sel:[1,1,1,1 1
// CHECK-NEXT:{{^}} ^
v_max3_f16 v5, v1, v2, v3 op_sel:[1,1,1,1,
// CHECK: error: expected a closing square bracket
// CHECK-NEXT:{{^}}v_max3_f16 v5, v1, v2, v3 op_sel:[1,1,1,1,
// CHECK-NEXT:{{^}} ^
v_max3_f16 v5, v1, v2, v3 op_sel:[1,1,1,1[
// CHECK: error: expected a closing square bracket
// CHECK-NEXT:{{^}}v_max3_f16 v5, v1, v2, v3 op_sel:[1,1,1,1[
// CHECK-NEXT:{{^}} ^
v_pk_add_u16 v1, v2, v3 op_sel:[0,0,0,0,0]
// CHECK: error: expected a closing square bracket
// CHECK-NEXT:{{^}}v_pk_add_u16 v1, v2, v3 op_sel:[0,0,0,0,0]
// CHECK-NEXT:{{^}} ^
v_mov_b32_dpp v5, v1 dpp8:[0,1,2,3,4,5,6,7)
// CHECK: error: expected a closing square bracket
// CHECK-NEXT:{{^}}v_mov_b32_dpp v5, v1 dpp8:[0,1,2,3,4,5,6,7)
// CHECK-NEXT:{{^}} ^
v_mov_b32_dpp v5, v1 quad_perm:[3,2,1,0) row_mask:0x0 bank_mask:0x0
// CHECK: error: expected a closing square bracket
// CHECK-NEXT:{{^}}v_mov_b32_dpp v5, v1 quad_perm:[3,2,1,0) row_mask:0x0 bank_mask:0x0
// CHECK-NEXT:{{^}} ^
//==============================================================================
// expected a colon
ds_swizzle_b32 v8, v2 offset
// CHECK: error: expected a colon
// CHECK-NEXT:{{^}}ds_swizzle_b32 v8, v2 offset
// CHECK-NEXT:{{^}} ^
ds_swizzle_b32 v8, v2 offset-
// CHECK: error: expected a colon
// CHECK-NEXT:{{^}}ds_swizzle_b32 v8, v2 offset-
// CHECK-NEXT:{{^}} ^
//==============================================================================
// expected a comma
ds_swizzle_b32 v8, v2 offset:swizzle(QUAD_PERM
// CHECK: error: expected a comma
// CHECK-NEXT:{{^}}ds_swizzle_b32 v8, v2 offset:swizzle(QUAD_PERM
// CHECK-NEXT:{{^}} ^
ds_swizzle_b32 v8, v2 offset:swizzle(QUAD_PERM, 0, 1, 2)
// CHECK: error: expected a comma
// CHECK-NEXT:{{^}}ds_swizzle_b32 v8, v2 offset:swizzle(QUAD_PERM, 0, 1, 2)
// CHECK-NEXT:{{^}} ^
s_setreg_b32 hwreg(1,2 3), s2
// CHECK: error: expected a comma
// CHECK-NEXT:{{^}}s_setreg_b32 hwreg(1,2 3), s2
// CHECK-NEXT:{{^}} ^
v_pk_add_u16 v1, v2, v3 op_sel:[0 0]
// CHECK: error: expected a comma
// CHECK-NEXT:{{^}}v_pk_add_u16 v1, v2, v3 op_sel:[0 0]
// CHECK-NEXT:{{^}} ^
v_mov_b32_dpp v5, v1 dpp8:[0,1,2,3,4,5,6]
// CHECK: error: expected a comma
// CHECK-NEXT:{{^}}v_mov_b32_dpp v5, v1 dpp8:[0,1,2,3,4,5,6]
// CHECK-NEXT:{{^}} ^
v_mov_b32_dpp v5, v1 quad_perm:[3,2] row_mask:0x0 bank_mask:0x0
// CHECK: error: expected a comma
// CHECK-NEXT:{{^}}v_mov_b32_dpp v5, v1 quad_perm:[3,2] row_mask:0x0 bank_mask:0x0
// CHECK-NEXT:{{^}} ^
//==============================================================================
// expected a comma or a closing parenthesis
s_setreg_b32 hwreg(1 2,3), s2
// CHECK: error: expected a comma or a closing parenthesis
// CHECK-NEXT:{{^}}s_setreg_b32 hwreg(1 2,3), s2
// CHECK-NEXT:{{^}} ^
//==============================================================================
// expected a comma or a closing square bracket
s_mov_b64 s[10:11], [s0
// CHECK: error: expected a comma or a closing square bracket
// CHECK-NEXT:{{^}}s_mov_b64 s[10:11], [s0
// CHECK-NEXT:{{^}} ^
s_mov_b64 s[10:11], [s0,s1
// CHECK: error: expected a comma or a closing square bracket
// CHECK-NEXT:{{^}}s_mov_b64 s[10:11], [s0,s1
// CHECK-NEXT:{{^}} ^
//==============================================================================
// expected a counter name
s_waitcnt vmcnt(0) & expcnt(0) & 1
// CHECK: error: expected a counter name
// CHECK-NEXT:{{^}}s_waitcnt vmcnt(0) & expcnt(0) & 1
// CHECK-NEXT:{{^}} ^
s_waitcnt vmcnt(0) & expcnt(0) & lgkmcnt(0)&
// CHECK: error: expected a counter name
// CHECK-NEXT:{{^}}s_waitcnt vmcnt(0) & expcnt(0) & lgkmcnt(0)&
// CHECK-NEXT:{{^}} ^
s_waitcnt vmcnt(0) & expcnt(0) 1
// CHECK: error: expected a counter name
// CHECK-NEXT:{{^}}s_waitcnt vmcnt(0) & expcnt(0) 1
// CHECK-NEXT:{{^}} ^
s_waitcnt vmcnt(0), expcnt(0), lgkmcnt(0),
// CHECK: error: expected a counter name
// CHECK-NEXT:{{^}}s_waitcnt vmcnt(0), expcnt(0), lgkmcnt(0),
// CHECK-NEXT:{{^}} ^
//==============================================================================
// expected a format string
tbuffer_store_format_xyzw v[1:4], off, ttmp[4:7], s0 format:[]
// CHECK: error: expected a format string
// CHECK-NEXT:{{^}}tbuffer_store_format_xyzw v[1:4], off, ttmp[4:7], s0 format:[]
// CHECK-NEXT:{{^}} ^
//==============================================================================
// expected a left parenthesis
s_waitcnt vmcnt(0) & expcnt(0) & x
// CHECK: error: expected a left parenthesis
// CHECK-NEXT:{{^}}s_waitcnt vmcnt(0) & expcnt(0) & x
// CHECK-NEXT:{{^}} ^
//==============================================================================
// expected a left square bracket
v_pk_add_u16 v1, v2, v3 op_sel:
// CHECK: error: expected a left square bracket
// CHECK-NEXT:{{^}}v_pk_add_u16 v1, v2, v3 op_sel:
// CHECK-NEXT:{{^}} ^
//==============================================================================
// expected a register or a list of registers
s_mov_b32 s1, [s0, 1
// CHECK: error: expected a register or a list of registers
// CHECK-NEXT:{{^}}s_mov_b32 s1, [s0, 1
// CHECK-NEXT:{{^}} ^
//==============================================================================
// expected a single 32-bit register
s_mov_b64 s[10:11], [s0,s[2:3]]
// CHECK: error: expected a single 32-bit register
// CHECK-NEXT:{{^}}s_mov_b64 s[10:11], [s0,s[2:3]]
// CHECK-NEXT:{{^}} ^
//==============================================================================
// expected a string
ds_swizzle_b32 v8, v2 offset:swizzle(BITMASK_PERM, pppii)
// CHECK: error: expected a string
// CHECK-NEXT:{{^}}ds_swizzle_b32 v8, v2 offset:swizzle(BITMASK_PERM, pppii)
// CHECK-NEXT:{{^}} ^
//==============================================================================
// expected a swizzle mode
ds_swizzle_b32 v8, v2 offset:swizzle(XXX,1)
// CHECK: error: expected a swizzle mode
// CHECK-NEXT:{{^}}ds_swizzle_b32 v8, v2 offset:swizzle(XXX,1)
// CHECK-NEXT:{{^}} ^
//==============================================================================
// expected absolute expression
s_waitcnt vmcnt(x)
// CHECK: error: expected absolute expression
// CHECK-NEXT:{{^}}s_waitcnt vmcnt(x)
// CHECK-NEXT:{{^}} ^
tbuffer_store_format_xyzw v[1:4], off, ttmp[4:7], format:[BUF_DATA_FORMAT_32]
// CHECK: error: expected absolute expression
// CHECK-NEXT:{{^}}tbuffer_store_format_xyzw v[1:4], off, ttmp[4:7], format:[BUF_DATA_FORMAT_32]
// CHECK-NEXT:{{^}} ^
tbuffer_store_format_xyzw v[1:4], off, ttmp[4:7], s0 format: offset:52
// CHECK: error: expected absolute expression
// CHECK-NEXT:{{^}}tbuffer_store_format_xyzw v[1:4], off, ttmp[4:7], s0 format: offset:52
// CHECK-NEXT:{{^}} ^
tbuffer_store_format_xyzw v[1:4], off, ttmp[4:7], s0 format:BUF_NUM_FORMAT_UINT]
// CHECK: error: expected absolute expression
// CHECK-NEXT:{{^}}tbuffer_store_format_xyzw v[1:4], off, ttmp[4:7], s0 format:BUF_NUM_FORMAT_UINT]
// CHECK-NEXT:{{^}} ^
v_mov_b32_dpp v5, v1 dpp8:[0,1,2,x,4,5,6,7]
// CHECK: error: expected absolute expression
// CHECK-NEXT:{{^}}v_mov_b32_dpp v5, v1 dpp8:[0,1,2,x,4,5,6,7]
// CHECK-NEXT:{{^}} ^
v_mov_b32_dpp v5, v1 quad_perm:[3,x,1,0] row_mask:0x0 bank_mask:0x0
// CHECK: error: expected absolute expression
// CHECK-NEXT:{{^}}v_mov_b32_dpp v5, v1 quad_perm:[3,x,1,0] row_mask:0x0 bank_mask:0x0
// CHECK-NEXT:{{^}} ^
v_mov_b32_dpp v5, v1 row_share:x row_mask:0x0 bank_mask:0x0
// CHECK: error: expected absolute expression
// CHECK-NEXT:{{^}}v_mov_b32_dpp v5, v1 row_share:x row_mask:0x0 bank_mask:0x0
// CHECK-NEXT:{{^}} ^
//==============================================================================
// expected a message name or an absolute expression
s_sendmsg sendmsg(MSG_GSX, GS_OP_CUT, 0)
// CHECK: error: expected a message name or an absolute expression
// CHECK-NEXT:{{^}}s_sendmsg sendmsg(MSG_GSX, GS_OP_CUT, 0)
// CHECK-NEXT:{{^}} ^
//==============================================================================
// expected a register name or an absolute expression
s_setreg_b32 hwreg(HW_REG_WRONG), s2
// CHECK: error: expected a register name or an absolute expression
// CHECK-NEXT:{{^}}s_setreg_b32 hwreg(HW_REG_WRONG), s2
// CHECK-NEXT:{{^}} ^
//==============================================================================
// expected a sendmsg macro or an absolute expression
s_sendmsg undef
// CHECK: error: expected a sendmsg macro or an absolute expression
// CHECK-NEXT:{{^}}s_sendmsg undef
// CHECK-NEXT:{{^}} ^
//==============================================================================
// expected a swizzle macro or an absolute expression
ds_swizzle_b32 v8, v2 offset:SWZ(QUAD_PERM, 0, 1, 2, 3)
// CHECK: error: expected a swizzle macro or an absolute expression
// CHECK-NEXT:{{^}}ds_swizzle_b32 v8, v2 offset:SWZ(QUAD_PERM, 0, 1, 2, 3)
// CHECK-NEXT:{{^}} ^
//==============================================================================
// expected a hwreg macro or an absolute expression
s_setreg_b32 undef, s2
// CHECK: error: expected a hwreg macro or an absolute expression
// CHECK-NEXT:{{^}}s_setreg_b32 undef, s2
// CHECK-NEXT:{{^}} ^
//==============================================================================
// expected an 11-bit unsigned offset
flat_atomic_cmpswap v0, v[1:2], v[3:4] offset:4095 glc
// CHECK: error: expected a 11-bit unsigned offset
// CHECK-NEXT:{{^}}flat_atomic_cmpswap v0, v[1:2], v[3:4] offset:4095 glc
// CHECK-NEXT:{{^}} ^
//==============================================================================
// expected an absolute expression
v_ceil_f32 v1, abs(u)
// CHECK: error: expected an absolute expression
// CHECK-NEXT:{{^}}v_ceil_f32 v1, abs(u)
// CHECK-NEXT:{{^}} ^
v_ceil_f32 v1, neg(u)
// CHECK: error: expected an absolute expression
// CHECK-NEXT:{{^}}v_ceil_f32 v1, neg(u)
// CHECK-NEXT:{{^}} ^
v_ceil_f32 v1, |u|
// CHECK: error: expected an absolute expression
// CHECK-NEXT:{{^}}v_ceil_f32 v1, |u|
// CHECK-NEXT:{{^}} ^
v_mov_b32_sdwa v1, sext(u)
// CHECK: error: expected an absolute expression
// CHECK-NEXT:{{^}}v_mov_b32_sdwa v1, sext(u)
// CHECK-NEXT:{{^}} ^
//==============================================================================
// expected an identifier
v_mov_b32_sdwa v5, v1 dst_sel:
// CHECK: error: expected an identifier
// CHECK-NEXT:{{^}}v_mov_b32_sdwa v5, v1 dst_sel:
// CHECK-NEXT:{{^}} ^
v_mov_b32_sdwa v5, v1 dst_sel:0
// CHECK: error: expected an identifier
// CHECK-NEXT:{{^}}v_mov_b32_sdwa v5, v1 dst_sel:0
// CHECK-NEXT:{{^}} ^
v_mov_b32_sdwa v5, v1 dst_sel:DWORD dst_unused:[UNUSED_PAD]
// CHECK: error: expected an identifier
// CHECK-NEXT:{{^}}v_mov_b32_sdwa v5, v1 dst_sel:DWORD dst_unused:[UNUSED_PAD]
// CHECK-NEXT:{{^}} ^
//==============================================================================
// expected an opening square bracket
v_mov_b32_dpp v5, v1 dpp8:(0,1,2,3,4,5,6,7)
// CHECK: error: expected an opening square bracket
// CHECK-NEXT:{{^}}v_mov_b32_dpp v5, v1 dpp8:(0,1,2,3,4,5,6,7)
// CHECK-NEXT:{{^}} ^
v_mov_b32_dpp v5, v1 quad_perm:(3,2,1,0) row_mask:0x0 bank_mask:0x0
// CHECK: error: expected an opening square bracket
// CHECK-NEXT:{{^}}v_mov_b32_dpp v5, v1 quad_perm:(3,2,1,0) row_mask:0x0 bank_mask:0x0
// CHECK-NEXT:{{^}} ^
//==============================================================================
// expected an operation name or an absolute expression
s_sendmsg sendmsg(MSG_GS, GS_OP_CUTX, 0)
// CHECK: error: expected an operation name or an absolute expression
// CHECK-NEXT:{{^}}s_sendmsg sendmsg(MSG_GS, GS_OP_CUTX, 0)
// CHECK-NEXT:{{^}} ^
//==============================================================================
// failed parsing operand.
image_load v[0:1], v0, s[0:7] dmask:0x9 dim:1 D
// CHECK: error: failed parsing operand.
// CHECK-NEXT:{{^}}image_load v[0:1], v0, s[0:7] dmask:0x9 dim:1 D
// CHECK-NEXT:{{^}} ^
v_ceil_f16 v0, abs(neg(1))
// CHECK: error: failed parsing operand.
// CHECK-NEXT:{{^}}v_ceil_f16 v0, abs(neg(1))
// CHECK-NEXT:{{^}} ^
//==============================================================================
// first register index should not exceed second index
s_mov_b64 s[10:11], s[1:0]
// CHECK: error: first register index should not exceed second index
// CHECK-NEXT:{{^}}s_mov_b64 s[10:11], s[1:0]
// CHECK-NEXT:{{^}} ^
//==============================================================================
// group size must be a power of two
ds_swizzle_b32 v8, v2 offset:swizzle(BROADCAST,3,1)
// CHECK: error: group size must be a power of two
// CHECK-NEXT:{{^}}ds_swizzle_b32 v8, v2 offset:swizzle(BROADCAST,3,1)
// CHECK-NEXT:{{^}} ^
ds_swizzle_b32 v8, v2 offset:swizzle(REVERSE,3)
// CHECK: error: group size must be a power of two
// CHECK-NEXT:{{^}}ds_swizzle_b32 v8, v2 offset:swizzle(REVERSE,3)
// CHECK-NEXT:{{^}} ^
ds_swizzle_b32 v8, v2 offset:swizzle(SWAP,3)
// CHECK: error: group size must be a power of two
// CHECK-NEXT:{{^}}ds_swizzle_b32 v8, v2 offset:swizzle(SWAP,3)
// CHECK-NEXT:{{^}} ^
//==============================================================================
// group size must be in the interval [1,16]
ds_swizzle_b32 v8, v2 offset:swizzle(SWAP,0)
// CHECK: error: group size must be in the interval [1,16]
// CHECK-NEXT:{{^}}ds_swizzle_b32 v8, v2 offset:swizzle(SWAP,0)
// CHECK-NEXT:{{^}} ^
//==============================================================================
// group size must be in the interval [2,32]
ds_swizzle_b32 v8, v2 offset:swizzle(BROADCAST,1,0)
// CHECK: error: group size must be in the interval [2,32]
// CHECK-NEXT:{{^}}ds_swizzle_b32 v8, v2 offset:swizzle(BROADCAST,1,0)
// CHECK-NEXT:{{^}} ^
//==============================================================================
// image address size does not match dim and a16
image_load v[0:3], v[0:1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D
// CHECK: error: image address size does not match dim and a16
// CHECK-NEXT:{{^}}image_load v[0:3], v[0:1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D
// CHECK-NEXT:{{^}}^
//==============================================================================
// image data size does not match dmask and tfe
image_load v[0:1], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D
// CHECK: error: image data size does not match dmask and tfe
// CHECK-NEXT:{{^}}image_load v[0:1], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D
// CHECK-NEXT:{{^}}^
//==============================================================================
// instruction must use glc
flat_atomic_cmpswap v0, v[1:2], v[3:4] offset:2047
// CHECK: error: instruction must use glc
// CHECK-NEXT:{{^}}flat_atomic_cmpswap v0, v[1:2], v[3:4] offset:2047
// CHECK-NEXT:{{^}}^
//==============================================================================
// instruction not supported on this GPU
s_cbranch_join 1
// CHECK: error: instruction not supported on this GPU
// CHECK-NEXT:{{^}}s_cbranch_join 1
// CHECK-NEXT:{{^}}^
//==============================================================================
// invalid bit offset: only 5-bit values are legal
s_getreg_b32 s2, hwreg(3,32,32)
// CHECK: error: invalid bit offset: only 5-bit values are legal
// CHECK-NEXT:{{^}}s_getreg_b32 s2, hwreg(3,32,32)
// CHECK-NEXT:{{^}} ^
//==============================================================================
// invalid bitfield width: only values from 1 to 32 are legal
s_setreg_b32 hwreg(3,0,33), s2
// CHECK: error: invalid bitfield width: only values from 1 to 32 are legal
// CHECK-NEXT:{{^}}s_setreg_b32 hwreg(3,0,33), s2
// CHECK-NEXT:{{^}} ^
//==============================================================================
// invalid code of hardware register: only 6-bit values are legal
s_setreg_b32 hwreg(0x40), s2
// CHECK: error: invalid code of hardware register: only 6-bit values are legal
// CHECK-NEXT:{{^}}s_setreg_b32 hwreg(0x40), s2
// CHECK-NEXT:{{^}} ^
//==============================================================================
// invalid counter name x
s_waitcnt vmcnt(0) & expcnt(0) x(0)
// CHECK: error: invalid counter name x
// CHECK-NEXT:{{^}}s_waitcnt vmcnt(0) & expcnt(0) x(0)
// CHECK-NEXT:{{^}} ^
//==============================================================================
// invalid dst_sel value
v_mov_b32_sdwa v5, v1 dst_sel:WORD
// CHECK: error: invalid dst_sel value
// CHECK-NEXT:{{^}}v_mov_b32_sdwa v5, v1 dst_sel:WORD
// CHECK-NEXT:{{^}} ^
//==============================================================================
// invalid dst_unused value
v_mov_b32_sdwa v5, v1 dst_unused:UNUSED
// CHECK: error: invalid dst_unused value
// CHECK-NEXT:{{^}}v_mov_b32_sdwa v5, v1 dst_unused:UNUSED
// CHECK-NEXT:{{^}} ^
//==============================================================================
// invalid exp target
exp invalid_target_10 v3, v2, v1, v0
// CHECK: error: invalid exp target
// CHECK-NEXT:{{^}}exp invalid_target_10 v3, v2, v1, v0
// CHECK-NEXT:{{^}} ^
exp pos00 v3, v2, v1, v0
// CHECK: error: invalid exp target
// CHECK-NEXT:{{^}}exp pos00 v3, v2, v1, v0
// CHECK-NEXT:{{^}} ^
//==============================================================================
// invalid immediate: only 16-bit values are legal
s_setreg_b32 0x1f803, s2
// CHECK: error: invalid immediate: only 16-bit values are legal
// CHECK-NEXT:{{^}}s_setreg_b32 0x1f803, s2
// CHECK-NEXT:{{^}} ^
//==============================================================================
// invalid instruction
v_dot_f32_f16 v0, v1, v2
// CHECK: error: invalid instruction
// CHECK-NEXT:{{^}}v_dot_f32_f16 v0, v1, v2
// CHECK-NEXT:{{^}}^
//==============================================================================
// invalid interpolation attribute
v_interp_p2_f32 v0, v1, att
// CHECK: error: invalid interpolation attribute
// CHECK-NEXT:{{^}}v_interp_p2_f32 v0, v1, att
// CHECK-NEXT:{{^}} ^
//==============================================================================
// invalid interpolation slot
v_interp_mov_f32 v8, p1, attr0.x
// CHECK: error: invalid interpolation slot
// CHECK-NEXT:{{^}}v_interp_mov_f32 v8, p1, attr0.x
// CHECK-NEXT:{{^}} ^
//==============================================================================
// invalid mask
ds_swizzle_b32 v8, v2 offset:swizzle(BITMASK_PERM, "pppi2")
// CHECK: error: invalid mask
// CHECK-NEXT:{{^}}ds_swizzle_b32 v8, v2 offset:swizzle(BITMASK_PERM, "pppi2")
// CHECK-NEXT:{{^}} ^
//==============================================================================
// invalid message id
s_sendmsg sendmsg(-1)
// CHECK: error: invalid message id
// CHECK-NEXT:{{^}}s_sendmsg sendmsg(-1)
// CHECK-NEXT:{{^}} ^
//==============================================================================
// invalid message stream id
s_sendmsg sendmsg(2, 2, 4)
// CHECK: error: invalid message stream id
// CHECK-NEXT:{{^}}s_sendmsg sendmsg(2, 2, 4)
// CHECK-NEXT:{{^}} ^
s_sendmsg sendmsg(MSG_GS, GS_OP_CUT, 4)
// CHECK: error: invalid message stream id
// CHECK-NEXT:{{^}}s_sendmsg sendmsg(MSG_GS, GS_OP_CUT, 4)
// CHECK-NEXT:{{^}} ^
//==============================================================================
// invalid mul value.
v_cvt_f64_i32 v[5:6], s1 mul:3
// CHECK: error: invalid mul value.
// CHECK-NEXT:{{^}}v_cvt_f64_i32 v[5:6], s1 mul:3
// CHECK-NEXT:{{^}} ^
//==============================================================================
// invalid or missing interpolation attribute channel
v_interp_p2_f32 v0, v1, attr0.q
// CHECK: error: invalid or missing interpolation attribute channel
// CHECK-NEXT:{{^}}v_interp_p2_f32 v0, v1, attr0.q
// CHECK-NEXT:{{^}} ^
//==============================================================================
// invalid or missing interpolation attribute number
v_interp_p2_f32 v7, v1, attr.x
// CHECK: error: invalid or missing interpolation attribute number
// CHECK-NEXT:{{^}}v_interp_p2_f32 v7, v1, attr.x
// CHECK-NEXT:{{^}} ^
//==============================================================================
// invalid op_sel operand
v_permlane16_b32 v5, v1, s2, s3 op_sel:[0, 0, 0, 1]
// CHECK: error: invalid op_sel operand
// CHECK-NEXT:{{^}}v_permlane16_b32 v5, v1, s2, s3 op_sel:[0, 0, 0, 1]
// CHECK-NEXT:{{^}} ^
//==============================================================================
// invalid op_sel value.
v_pk_add_u16 v1, v2, v3 op_sel:[-1,0]
// CHECK: error: invalid op_sel value.
// CHECK-NEXT:{{^}}v_pk_add_u16 v1, v2, v3 op_sel:[-1,0]
// CHECK-NEXT:{{^}} ^
//==============================================================================
// invalid operand (violates constant bus restrictions)
v_ashrrev_i64 v[0:1], 0x100, s[0:1]
// CHECK: error: invalid operand (violates constant bus restrictions)
// CHECK-NEXT:{{^}}v_ashrrev_i64 v[0:1], 0x100, s[0:1]
// CHECK-NEXT:{{^}} ^
v_ashrrev_i64 v[0:1], s3, s[0:1]
// CHECK: error: invalid operand (violates constant bus restrictions)
// CHECK-NEXT:{{^}}v_ashrrev_i64 v[0:1], s3, s[0:1]
// CHECK-NEXT:{{^}} ^
v_bfe_u32 v0, s1, 0x3039, s2
// CHECK: error: invalid operand (violates constant bus restrictions)
// CHECK-NEXT:{{^}}v_bfe_u32 v0, s1, 0x3039, s2
// CHECK-NEXT:{{^}} ^
v_bfe_u32 v0, s1, s2, s3
// CHECK: error: invalid operand (violates constant bus restrictions)
// CHECK-NEXT:{{^}}v_bfe_u32 v0, s1, s2, s3
// CHECK-NEXT:{{^}} ^
v_div_fmas_f32 v5, s3, 0x123, v3
// CHECK: error: invalid operand (violates constant bus restrictions)
// CHECK-NEXT:{{^}}v_div_fmas_f32 v5, s3, 0x123, v3
// CHECK-NEXT:{{^}} ^
v_div_fmas_f32 v5, s3, v3, 0x123
// CHECK: error: invalid operand (violates constant bus restrictions)
// CHECK-NEXT:{{^}}v_div_fmas_f32 v5, s3, v3, 0x123
// CHECK-NEXT:{{^}} ^
v_div_fmas_f32 v5, 0x123, v3, s3
// CHECK: error: invalid operand (violates constant bus restrictions)
// CHECK-NEXT:{{^}}v_div_fmas_f32 v5, 0x123, v3, s3
// CHECK-NEXT:{{^}} ^
v_div_fmas_f32 v5, s3, s4, v3
// CHECK: error: invalid operand (violates constant bus restrictions)
// CHECK-NEXT:{{^}}v_div_fmas_f32 v5, s3, s4, v3
// CHECK-NEXT:{{^}} ^
//==============================================================================
// invalid operand for instruction
buffer_load_dword v5, off, s[8:11], s3 tfe lds
// CHECK: error: invalid operand for instruction
// CHECK-NEXT:{{^}}buffer_load_dword v5, off, s[8:11], s3 tfe lds
// CHECK-NEXT:{{^}} ^
exp mrt0 0x12345678, v0, v0, v0
// CHECK: error: invalid operand for instruction
// CHECK-NEXT:{{^}}exp mrt0 0x12345678, v0, v0, v0
// CHECK-NEXT:{{^}} ^
v_cmp_eq_f32 s[0:1], private_base, s0
// CHECK: error: invalid operand for instruction
// CHECK-NEXT:{{^}}v_cmp_eq_f32 s[0:1], private_base, s0
// CHECK-NEXT:{{^}} ^
//==============================================================================
// invalid operation id
s_sendmsg sendmsg(15, -1)
// CHECK: error: invalid operation id
// CHECK-NEXT:{{^}}s_sendmsg sendmsg(15, -1)
// CHECK-NEXT:{{^}} ^
//==============================================================================
// invalid or unsupported register size
s_mov_b64 s[0:17], -1
// CHECK: error: invalid or unsupported register size
// CHECK-NEXT:{{^}}s_mov_b64 s[0:17], -1
// CHECK-NEXT:{{^}} ^
//==============================================================================
// invalid register alignment
s_load_dwordx4 s[1:4], s[2:3], s4
// CHECK: error: invalid register alignment
// CHECK-NEXT:{{^}}s_load_dwordx4 s[1:4], s[2:3], s4
// CHECK-NEXT:{{^}} ^
//==============================================================================
// invalid register index
s_mov_b32 s1, s[0:-1]
// CHECK: error: invalid register index
// CHECK-NEXT:{{^}}s_mov_b32 s1, s[0:-1]
// CHECK-NEXT:{{^}} ^
v_add_f64 v[0:1], v[0:1], v[0xF00000001:0x2]
// CHECK: error: invalid register index
// CHECK-NEXT:{{^}}v_add_f64 v[0:1], v[0:1], v[0xF00000001:0x2]
// CHECK-NEXT:{{^}} ^
//==============================================================================
// invalid register name
s_mov_b64 s[10:11], [x0,s1]
// CHECK: error: invalid register name
// CHECK-NEXT:{{^}}s_mov_b64 s[10:11], [x0,s1]
// CHECK-NEXT:{{^}} ^
//==============================================================================
// invalid row_share value
v_mov_b32_dpp v5, v1 row_share:16 row_mask:0x0 bank_mask:0x0
// CHECK: error: invalid row_share value
// CHECK-NEXT:{{^}}v_mov_b32_dpp v5, v1 row_share:16 row_mask:0x0 bank_mask:0x0
// CHECK-NEXT:{{^}} ^
v_mov_b32_dpp v5, v1 row_share:-1 row_mask:0x0 bank_mask:0x0
// CHECK: error: invalid row_share value
// CHECK-NEXT:{{^}}v_mov_b32_dpp v5, v1 row_share:-1 row_mask:0x0 bank_mask:0x0
// CHECK-NEXT:{{^}} ^
//==============================================================================
// invalid syntax, expected 'neg' modifier
v_ceil_f32 v0, --1
// CHECK: error: invalid syntax, expected 'neg' modifier
// CHECK-NEXT:{{^}}v_ceil_f32 v0, --1
// CHECK-NEXT:{{^}} ^
//==============================================================================
// invalid use of lds_direct
v_ashrrev_i16 v0, lds_direct, v0
// CHECK: error: invalid use of lds_direct
// CHECK-NEXT:{{^}}v_ashrrev_i16 v0, lds_direct, v0
// CHECK-NEXT:{{^}} ^
//==============================================================================
// lane id must be in the interval [0,group size - 1]
ds_swizzle_b32 v8, v2 offset:swizzle(BROADCAST,2,-1)
// CHECK: error: lane id must be in the interval [0,group size - 1]
// CHECK-NEXT:{{^}}ds_swizzle_b32 v8, v2 offset:swizzle(BROADCAST,2,-1)
// CHECK-NEXT:{{^}} ^
//==============================================================================
// message does not support operations
s_sendmsg sendmsg(MSG_GS_ALLOC_REQ, 0)
// CHECK: error: message does not support operations
// CHECK-NEXT:{{^}}s_sendmsg sendmsg(MSG_GS_ALLOC_REQ, 0)
// CHECK-NEXT:{{^}} ^
//==============================================================================
// message operation does not support streams
s_sendmsg sendmsg(MSG_GS_DONE, GS_OP_NOP, 0)
// CHECK: error: message operation does not support streams
// CHECK-NEXT:{{^}}s_sendmsg sendmsg(MSG_GS_DONE, GS_OP_NOP, 0)
// CHECK-NEXT:{{^}} ^
//==============================================================================
// missing message operation
s_sendmsg sendmsg(MSG_SYSMSG)
// CHECK: error: missing message operation
// CHECK-NEXT:{{^}}s_sendmsg sendmsg(MSG_SYSMSG)
// CHECK-NEXT:{{^}} ^
//==============================================================================
// missing register index
s_mov_b64 s[10:11], [s
// CHECK: error: missing register index
// CHECK-NEXT:{{^}}s_mov_b64 s[10:11], [s
// CHECK-NEXT:{{^}} ^
s_mov_b64 s[10:11], [s,s1]
// CHECK: error: missing register index
// CHECK-NEXT:{{^}}s_mov_b64 s[10:11], [s,s1]
// CHECK-NEXT:{{^}} ^
//==============================================================================
// not a valid operand.
s_branch offset:1
// CHECK: error: not a valid operand.
// CHECK-NEXT:{{^}}s_branch offset:1
// CHECK-NEXT:{{^}} ^
v_mov_b32 v0, v0 row_bcast:0
// CHECK: error: not a valid operand.
// CHECK-NEXT:{{^}}v_mov_b32 v0, v0 row_bcast:0
// CHECK-NEXT:{{^}} ^
//==============================================================================
// only one literal operand is allowed
s_and_b32 s2, 0x12345678, 0x12345679
// CHECK: error: only one literal operand is allowed
// CHECK-NEXT:{{^}}s_and_b32 s2, 0x12345678, 0x12345679
// CHECK-NEXT:{{^}} ^
v_add_f64 v[0:1], 1.23456, -abs(1.2345)
// CHECK: error: only one literal operand is allowed
// CHECK-NEXT:{{^}}v_add_f64 v[0:1], 1.23456, -abs(1.2345)
// CHECK-NEXT:{{^}} ^
v_min3_i16 v5, 0x5678, 0x5678, 0x5679
// CHECK: error: only one literal operand is allowed
// CHECK-NEXT:{{^}}v_min3_i16 v5, 0x5678, 0x5678, 0x5679
// CHECK-NEXT:{{^}} ^
v_pk_add_f16 v1, 25.0, 25.1
// CHECK: error: only one literal operand is allowed
// CHECK-NEXT:{{^}}v_pk_add_f16 v1, 25.0, 25.1
// CHECK-NEXT:{{^}} ^
v_fma_mix_f32 v5, 0x7c, 0x7b, 1
// CHECK: error: only one literal operand is allowed
// CHECK-NEXT:{{^}}v_fma_mix_f32 v5, 0x7c, 0x7b, 1
// CHECK-NEXT:{{^}} ^
v_pk_add_i16 v5, 0x7c, 0x4000
// CHECK: error: only one literal operand is allowed
// CHECK-NEXT:{{^}}v_pk_add_i16 v5, 0x7c, 0x4000
// CHECK-NEXT:{{^}} ^
v_pk_add_i16 v5, 0x4400, 0x4000
// CHECK: error: only one literal operand is allowed
// CHECK-NEXT:{{^}}v_pk_add_i16 v5, 0x4400, 0x4000
// CHECK-NEXT:{{^}} ^
v_bfe_u32 v0, v2, 123, undef
// CHECK: error: only one literal operand is allowed
// CHECK-NEXT:{{^}}v_bfe_u32 v0, v2, 123, undef
// CHECK-NEXT:{{^}} ^
v_bfe_u32 v0, v2, undef, 123
// CHECK: error: only one literal operand is allowed
// CHECK-NEXT:{{^}}v_bfe_u32 v0, v2, undef, 123
// CHECK-NEXT:{{^}} ^
//==============================================================================
// out of bounds interpolation attribute number
v_interp_p1_f32 v0, v1, attr64.w
// CHECK: error: out of bounds interpolation attribute number
// CHECK-NEXT:{{^}}v_interp_p1_f32 v0, v1, attr64.w
// CHECK-NEXT:{{^}} ^
//==============================================================================
// out of range format
tbuffer_load_format_d16_x v0, off, s[0:3], format:-1, 0
// CHECK: error: out of range format
// CHECK-NEXT:{{^}}tbuffer_load_format_d16_x v0, off, s[0:3], format:-1, 0
// CHECK-NEXT:{{^}} ^
//==============================================================================
// register does not fit in the list
s_mov_b64 s[10:11], [exec,exec_lo]
// CHECK: error: register does not fit in the list
// CHECK-NEXT:{{^}}s_mov_b64 s[10:11], [exec,exec_lo]
// CHECK-NEXT:{{^}} ^
s_mov_b64 s[10:11], [exec_lo,exec]
// CHECK: error: register does not fit in the list
// CHECK-NEXT:{{^}}s_mov_b64 s[10:11], [exec_lo,exec]
// CHECK-NEXT:{{^}} ^
//==============================================================================
// register index is out of range
s_add_i32 s106, s0, s1
// CHECK: error: register index is out of range
// CHECK-NEXT:{{^}}s_add_i32 s106, s0, s1
// CHECK-NEXT:{{^}} ^
s_load_dwordx16 s[100:115], s[2:3], s4
// CHECK: error: register index is out of range
// CHECK-NEXT:{{^}}s_load_dwordx16 s[100:115], s[2:3], s4
// CHECK-NEXT:{{^}} ^
s_mov_b32 ttmp16, 0
// CHECK: error: register index is out of range
// CHECK-NEXT:{{^}}s_mov_b32 ttmp16, 0
// CHECK-NEXT:{{^}} ^
v_add_nc_i32 v256, v0, v1
// CHECK: error: register index is out of range
// CHECK-NEXT:{{^}}v_add_nc_i32 v256, v0, v1
// CHECK-NEXT:{{^}} ^
//==============================================================================
// register not available on this GPU
s_and_b32 ttmp9, tma_hi, 0x0000ffff
// CHECK: error: register not available on this GPU
// CHECK-NEXT:{{^}}s_and_b32 ttmp9, tma_hi, 0x0000ffff
// CHECK-NEXT:{{^}} ^
s_mov_b32 flat_scratch, -1
// CHECK: error: register not available on this GPU
// CHECK-NEXT:{{^}}s_mov_b32 flat_scratch, -1
// CHECK-NEXT:{{^}} ^
//==============================================================================
// registers in a list must be of the same kind
s_mov_b64 s[10:11], [a0,v1]
// CHECK: error: registers in a list must be of the same kind
// CHECK-NEXT:{{^}}s_mov_b64 s[10:11], [a0,v1]
// CHECK-NEXT:{{^}} ^
//==============================================================================
// registers in a list must have consecutive indices
s_mov_b64 s[10:11], [a0,a2]
// CHECK: error: registers in a list must have consecutive indices
// CHECK-NEXT:{{^}}s_mov_b64 s[10:11], [a0,a2]
// CHECK-NEXT:{{^}} ^
s_mov_b64 s[10:11], [s0,s0]
// CHECK: error: registers in a list must have consecutive indices
// CHECK-NEXT:{{^}}s_mov_b64 s[10:11], [s0,s0]
// CHECK-NEXT:{{^}} ^
s_mov_b64 s[10:11], [s2,s1]
// CHECK: error: registers in a list must have consecutive indices
// CHECK-NEXT:{{^}}s_mov_b64 s[10:11], [s2,s1]
// CHECK-NEXT:{{^}} ^
//==============================================================================
// source operand must be a VGPR
v_movrels_b32_sdwa v0, 1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD
// CHECK: error: source operand must be a VGPR
// CHECK-NEXT:{{^}}v_movrels_b32_sdwa v0, 1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD
// CHECK-NEXT:{{^}} ^
v_movrels_b32_sdwa v0, s0
// CHECK: error: source operand must be a VGPR
// CHECK-NEXT:{{^}}v_movrels_b32_sdwa v0, s0
// CHECK-NEXT:{{^}} ^
v_movrels_b32_sdwa v0, shared_base
// CHECK: error: source operand must be a VGPR
// CHECK-NEXT:{{^}}v_movrels_b32_sdwa v0, shared_base
// CHECK-NEXT:{{^}} ^
//==============================================================================
// specified hardware register is not supported on this GPU
s_getreg_b32 s2, hwreg(HW_REG_SHADER_CYCLES)
// CHECK: error: specified hardware register is not supported on this GPU
// CHECK-NEXT:{{^}}s_getreg_b32 s2, hwreg(HW_REG_SHADER_CYCLES)
// CHECK-NEXT:{{^}} ^
//==============================================================================
// too few operands for instruction
tbuffer_store_format_xyzw v[1:4], off, ttmp[4:7]
// CHECK: error: too few operands for instruction
// CHECK-NEXT:{{^}}tbuffer_store_format_xyzw v[1:4], off, ttmp[4:7]
// CHECK-NEXT:{{^}}^
v_add_f32_e64 v0, v1
// CHECK: error: too few operands for instruction
// CHECK-NEXT:{{^}}v_add_f32_e64 v0, v1
// CHECK-NEXT:{{^}}^
//==============================================================================
// too large value for expcnt
s_waitcnt expcnt(8)
// CHECK: error: too large value for expcnt
// CHECK-NEXT:{{^}}s_waitcnt expcnt(8)
// CHECK-NEXT:{{^}} ^
//==============================================================================
// too large value for lgkmcnt
s_waitcnt lgkmcnt(64)
// CHECK: error: too large value for lgkmcnt
// CHECK-NEXT:{{^}}s_waitcnt lgkmcnt(64)
// CHECK-NEXT:{{^}} ^
//==============================================================================
// too large value for vmcnt
s_waitcnt vmcnt(64)
// CHECK: error: too large value for vmcnt
// CHECK-NEXT:{{^}}s_waitcnt vmcnt(64)
// CHECK-NEXT:{{^}} ^
//==============================================================================
// unknown token in expression
ds_swizzle_b32 v8, v2 offset:
// CHECK: error: unknown token in expression
// CHECK-NEXT:{{^}}ds_swizzle_b32 v8, v2 offset:
// CHECK-NEXT:{{^}} ^
s_sendmsg sendmsg(1 -)
// CHECK: error: unknown token in expression
// CHECK-NEXT:{{^}}s_sendmsg sendmsg(1 -)
// CHECK-NEXT:{{^}} ^
tbuffer_load_format_d16_x v0, off, s[0:3], format:1,, s0
// CHECK: error: unknown token in expression
// CHECK-NEXT:{{^}}tbuffer_load_format_d16_x v0, off, s[0:3], format:1,, s0
// CHECK-NEXT:{{^}} ^
tbuffer_load_format_d16_x v0, off, s[0:3], format:1:, s0
// CHECK: error: unknown token in expression
// CHECK-NEXT:{{^}}tbuffer_load_format_d16_x v0, off, s[0:3], format:1:, s0
// CHECK-NEXT:{{^}} ^
v_pk_add_u16 v1, v2, v3 op_sel:[
// CHECK: error: unknown token in expression
// CHECK-NEXT:{{^}}v_pk_add_u16 v1, v2, v3 op_sel:[
// CHECK-NEXT:{{^}} ^
v_pk_add_u16 v1, v2, v3 op_sel:[,0]
// CHECK: error: unknown token in expression
// CHECK-NEXT:{{^}}v_pk_add_u16 v1, v2, v3 op_sel:[,0]
// CHECK-NEXT:{{^}} ^
v_pk_add_u16 v1, v2, v3 op_sel:[,]
// CHECK: error: unknown token in expression
// CHECK-NEXT:{{^}}v_pk_add_u16 v1, v2, v3 op_sel:[,]
// CHECK-NEXT:{{^}} ^
v_pk_add_u16 v1, v2, v3 op_sel:[0,]
// CHECK: error: unknown token in expression
// CHECK-NEXT:{{^}}v_pk_add_u16 v1, v2, v3 op_sel:[0,]
// CHECK-NEXT:{{^}} ^
v_pk_add_u16 v1, v2, v3 op_sel:[]
// CHECK: error: unknown token in expression
// CHECK-NEXT:{{^}}v_pk_add_u16 v1, v2, v3 op_sel:[]
// CHECK-NEXT:{{^}} ^
//==============================================================================
// unsupported format
tbuffer_store_format_xyzw v[1:4], off, ttmp[4:7], s0 format:[BUF_DATA_FORMAT]
// CHECK: error: unsupported format
// CHECK-NEXT:{{^}}tbuffer_store_format_xyzw v[1:4], off, ttmp[4:7], s0 format:[BUF_DATA_FORMAT]
// CHECK-NEXT:{{^}} ^
//==============================================================================
// expected vertical bar
v_ceil_f32 v1, |1+1|
// CHECK: error: expected vertical bar
// CHECK-NEXT:{{^}}v_ceil_f32 v1, |1+1|
// CHECK-NEXT:{{^}} ^
//==============================================================================
// expected left paren after neg
v_ceil_f32 v1, neg-(v2)
// CHECK: error: expected left paren after neg
// CHECK-NEXT:{{^}}v_ceil_f32 v1, neg-(v2)
// CHECK-NEXT:{{^}} ^
//==============================================================================
// expected left paren after abs
v_ceil_f32 v1, abs-(v2)
// CHECK: error: expected left paren after abs
// CHECK-NEXT:{{^}}v_ceil_f32 v1, abs-(v2)
// CHECK-NEXT:{{^}} ^
//==============================================================================
// expected left paren after sext
v_cmpx_f_i32_sdwa sext[v1], v2 src0_sel:DWORD src1_sel:DWORD
// CHECK: error: expected left paren after sext
// CHECK-NEXT:{{^}}v_cmpx_f_i32_sdwa sext[v1], v2 src0_sel:DWORD src1_sel:DWORD
// CHECK-NEXT:{{^}} ^
//==============================================================================
// expected closing parentheses
v_ceil_f32 v1, abs(v2]
// CHECK: error: expected closing parentheses
// CHECK-NEXT:{{^}}v_ceil_f32 v1, abs(v2]
// CHECK-NEXT:{{^}} ^
v_ceil_f32 v1, neg(v2]
// CHECK: error: expected closing parentheses
// CHECK-NEXT:{{^}}v_ceil_f32 v1, neg(v2]
// CHECK-NEXT:{{^}} ^
v_cmpx_f_i32_sdwa sext(v1], v2 src0_sel:DWORD src1_sel:DWORD
// CHECK: error: expected closing parentheses
// CHECK-NEXT:{{^}}v_cmpx_f_i32_sdwa sext(v1], v2 src0_sel:DWORD src1_sel:DWORD
// CHECK-NEXT:{{^}} ^
//==============================================================================
// expected a left parentheses
ds_swizzle_b32 v8, v2 offset:swizzle[QUAD_PERM, 0, 1, 2, 3]
// CHECK: error: expected a left parentheses
// CHECK-NEXT:{{^}}ds_swizzle_b32 v8, v2 offset:swizzle[QUAD_PERM, 0, 1, 2, 3]
// CHECK-NEXT:{{^}} ^
//==============================================================================
// expected an absolute expression or a label
s_branch 1+x
// CHECK: error: expected an absolute expression or a label
// CHECK-NEXT:{{^}}s_branch 1+x
// CHECK-NEXT:{{^}} ^
//==============================================================================
// expected a 16-bit offset
ds_swizzle_b32 v8, v2 offset:0x10000
// CHECK: error: expected a 16-bit offset
// CHECK-NEXT:{{^}}ds_swizzle_b32 v8, v2 offset:0x10000
// CHECK-NEXT:{{^}} ^