diff --git a/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp b/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp index ed956a1f755c0..d8f441d1ccfe4 100644 --- a/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp +++ b/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp @@ -9760,10 +9760,14 @@ unsigned AMDGPUAsmParser::validateTargetOperandClass(MCParsedAsmOperand &Op, case MCK_SReg_64: case MCK_SReg_64_XEXEC: // Null is defined as a 32-bit register but - // it should also be enabled with 64-bit operands. - // The following code enables it for SReg_64 operands + // it should also be enabled with 64-bit operands or larger. + // The following code enables it for SReg_64 and larger operands // used as source and destination. Remaining source // operands are handled in isInlinableImm. + case MCK_SReg_96: + case MCK_SReg_128: + case MCK_SReg_256: + case MCK_SReg_512: return Operand.isNull() ? Match_Success : Match_InvalidOperand; default: return Match_InvalidOperand; diff --git a/llvm/lib/Target/AMDGPU/BUFInstructions.td b/llvm/lib/Target/AMDGPU/BUFInstructions.td index a351f451584f9..88205ea361c55 100644 --- a/llvm/lib/Target/AMDGPU/BUFInstructions.td +++ b/llvm/lib/Target/AMDGPU/BUFInstructions.td @@ -168,7 +168,7 @@ class getMTBUFInsDA vdataList, dag SOffset = !if(hasRestrictedSOffset, (ins SReg_32:$soffset), (ins SCSrc_b32:$soffset)); - dag NonVaddrInputs = !con((ins SReg_128:$srsrc), SOffset, + dag NonVaddrInputs = !con((ins SReg_128_XNULL:$srsrc), SOffset, (ins Offset:$offset, FORMAT:$format, CPol_0:$cpol, i1imm_0:$swz)); dag Inputs = !if(!empty(vaddrList), @@ -418,7 +418,7 @@ class getMUBUFInsDA vdataList, RegisterOperand vdata_op = getLdStVDataRegisterOperand.ret; dag SOffset = !if(hasRestrictedSOffset, (ins SReg_32:$soffset), (ins SCSrc_b32:$soffset)); - dag NonVaddrInputs = !con((ins SReg_128:$srsrc), SOffset, (ins Offset:$offset, CPol_0:$cpol, i1imm_0:$swz)); + dag NonVaddrInputs = !con((ins SReg_128_XNULL:$srsrc), SOffset, (ins Offset:$offset, CPol_0:$cpol, i1imm_0:$swz)); dag Inputs = !if(!empty(vaddrList), NonVaddrInputs, !con((ins vaddrClass:$vaddr), NonVaddrInputs)); dag ret = !if(!empty(vdataList), Inputs, !con((ins vdata_op:$vdata), Inputs)); @@ -703,7 +703,7 @@ class getMUBUFAtomicInsDA : MIMG_gfx6789 { - let InOperandList = !con((ins addr_rc:$vaddr, SReg_256:$srsrc, + let InOperandList = !con((ins addr_rc:$vaddr, SReg_256_XNULL:$srsrc, DMask:$dmask, UNorm:$unorm, CPol:$cpol, R128A16:$r128, TFE:$tfe, LWE:$lwe, DA:$da), !if(BaseOpcode.HasD16, (ins D16:$d16), (ins))); @@ -435,7 +435,7 @@ class MIMG_NoSampler_Helper_gfx90a : MIMG_gfx90a .ret:$vdata), dns> { - let InOperandList = !con((ins addr_rc:$vaddr, SReg_256:$srsrc, + let InOperandList = !con((ins addr_rc:$vaddr, SReg_256_XNULL:$srsrc, DMask:$dmask, UNorm:$unorm, CPol:$cpol, R128A16:$r128, LWE:$lwe, DA:$da), !if(BaseOpcode.HasD16, (ins D16:$d16), (ins))); @@ -447,7 +447,7 @@ class MIMG_NoSampler_gfx10 : MIMG_gfx10 { - let InOperandList = !con((ins AddrRC:$vaddr0, SReg_256:$srsrc, DMask:$dmask, + let InOperandList = !con((ins AddrRC:$vaddr0, SReg_256_XNULL:$srsrc, DMask:$dmask, Dim:$dim, UNorm:$unorm, CPol:$cpol, R128A16:$r128, A16:$a16, TFE:$tfe, LWE:$lwe), !if(BaseOpcode.HasD16, (ins D16:$d16), (ins))); @@ -460,7 +460,7 @@ class MIMG_NoSampler_nsa_gfx10 : MIMG_nsa_gfx10 { let InOperandList = !con(AddrIns, - (ins SReg_256:$srsrc, DMask:$dmask, + (ins SReg_256_XNULL:$srsrc, DMask:$dmask, Dim:$dim, UNorm:$unorm, CPol:$cpol, R128A16:$r128, A16:$a16, TFE:$tfe, LWE:$lwe), !if(BaseOpcode.HasD16, (ins D16:$d16), (ins))); @@ -472,7 +472,7 @@ class MIMG_NoSampler_gfx11 : MIMG_gfx11 { - let InOperandList = !con((ins AddrRC:$vaddr0, SReg_256:$srsrc, DMask:$dmask, + let InOperandList = !con((ins AddrRC:$vaddr0, SReg_256_XNULL:$srsrc, DMask:$dmask, Dim:$dim, UNorm:$unorm, CPol:$cpol, R128A16:$r128, A16:$a16, TFE:$tfe, LWE:$lwe), !if(BaseOpcode.HasD16, (ins D16:$d16), (ins))); @@ -485,7 +485,7 @@ class MIMG_NoSampler_nsa_gfx11 : MIMG_nsa_gfx11 { let InOperandList = !con(AddrIns, - (ins SReg_256:$srsrc, DMask:$dmask, + (ins SReg_256_XNULL:$srsrc, DMask:$dmask, Dim:$dim, UNorm:$unorm, CPol:$cpol, R128A16:$r128, A16:$a16, TFE:$tfe, LWE:$lwe), !if(BaseOpcode.HasD16, (ins D16:$d16), (ins))); @@ -498,7 +498,7 @@ class VIMAGE_NoSampler_gfx12 : VIMAGE_gfx12 { let InOperandList = !con(AddrIns, - (ins SReg_256:$rsrc, DMask:$dmask, Dim:$dim, + (ins SReg_256_XNULL:$rsrc, DMask:$dmask, Dim:$dim, CPol:$cpol, R128A16:$r128, A16:$a16, TFE:$tfe), !if(BaseOpcode.HasD16, (ins D16:$d16), (ins))); let AsmString = opcode#" $vdata, "#AddrAsm#", $rsrc$dmask$dim$cpol$r128$a16$tfe" @@ -510,8 +510,8 @@ class VSAMPLE_Sampler_gfx12 : VSAMPLE_gfx12 { let InOperandList = !con(AddrIns, - (ins SReg_256:$rsrc), - !if(BaseOpcode.Sampler, (ins SReg_128:$samp), (ins)), + (ins SReg_256_XNULL:$rsrc), + !if(BaseOpcode.Sampler, (ins SReg_128_XNULL:$samp), (ins)), (ins DMask:$dmask, Dim:$dim, UNorm:$unorm, CPol:$cpol, R128A16:$r128, A16:$a16, TFE:$tfe, LWE:$lwe), @@ -527,8 +527,8 @@ class VSAMPLE_Sampler_nortn_gfx12 : VSAMPLE_gfx12 { let InOperandList = !con(AddrIns, - (ins SReg_256:$rsrc), - !if(BaseOpcode.Sampler, (ins SReg_128:$samp), (ins)), + (ins SReg_256_XNULL:$rsrc), + !if(BaseOpcode.Sampler, (ins SReg_128_XNULL:$samp), (ins)), (ins DMask:$dmask, Dim:$dim, UNorm:$unorm, CPol:$cpol, R128A16:$r128, A16:$a16, TFE:$tfe, LWE:$lwe), @@ -679,7 +679,7 @@ class MIMG_Store_Helper : MIMG_gfx6789 { - let InOperandList = !con((ins data_rc:$vdata, addr_rc:$vaddr, SReg_256:$srsrc, + let InOperandList = !con((ins data_rc:$vdata, addr_rc:$vaddr, SReg_256_XNULL:$srsrc, DMask:$dmask, UNorm:$unorm, CPol:$cpol, R128A16:$r128, TFE:$tfe, LWE:$lwe, DA:$da), !if(BaseOpcode.HasD16, (ins D16:$d16), (ins))); @@ -693,7 +693,7 @@ class MIMG_Store_Helper_gfx90a : MIMG_gfx90a { let InOperandList = !con((ins getLdStRegisterOperand.ret:$vdata, - addr_rc:$vaddr, SReg_256:$srsrc, + addr_rc:$vaddr, SReg_256_XNULL:$srsrc, DMask:$dmask, UNorm:$unorm, CPol:$cpol, R128A16:$r128, LWE:$lwe, DA:$da), !if(BaseOpcode.HasD16, (ins D16:$d16), (ins))); @@ -705,7 +705,7 @@ class MIMG_Store_gfx10 : MIMG_gfx10 { - let InOperandList = !con((ins DataRC:$vdata, AddrRC:$vaddr0, SReg_256:$srsrc, + let InOperandList = !con((ins DataRC:$vdata, AddrRC:$vaddr0, SReg_256_XNULL:$srsrc, DMask:$dmask, Dim:$dim, UNorm:$unorm, CPol:$cpol, R128A16:$r128, A16:$a16, TFE:$tfe, LWE:$lwe), !if(BaseOpcode.HasD16, (ins D16:$d16), (ins))); @@ -719,7 +719,7 @@ class MIMG_Store_nsa_gfx10 { let InOperandList = !con((ins DataRC:$vdata), AddrIns, - (ins SReg_256:$srsrc, DMask:$dmask, + (ins SReg_256_XNULL:$srsrc, DMask:$dmask, Dim:$dim, UNorm:$unorm, CPol:$cpol, R128A16:$r128, A16:$a16, TFE:$tfe, LWE:$lwe), !if(BaseOpcode.HasD16, (ins D16:$d16), (ins))); @@ -731,7 +731,7 @@ class MIMG_Store_gfx11 : MIMG_gfx11 { - let InOperandList = !con((ins DataRC:$vdata, AddrRC:$vaddr0, SReg_256:$srsrc, + let InOperandList = !con((ins DataRC:$vdata, AddrRC:$vaddr0, SReg_256_XNULL:$srsrc, DMask:$dmask, Dim:$dim, UNorm:$unorm, CPol:$cpol, R128A16:$r128, A16:$a16, TFE:$tfe, LWE:$lwe), !if(BaseOpcode.HasD16, (ins D16:$d16), (ins))); @@ -745,7 +745,7 @@ class MIMG_Store_nsa_gfx11 { let InOperandList = !con((ins DataRC:$vdata), AddrIns, - (ins SReg_256:$srsrc, DMask:$dmask, + (ins SReg_256_XNULL:$srsrc, DMask:$dmask, Dim:$dim, UNorm:$unorm, CPol:$cpol, R128A16:$r128, A16:$a16, TFE:$tfe, LWE:$lwe), !if(BaseOpcode.HasD16, (ins D16:$d16), (ins))); @@ -759,7 +759,7 @@ class VIMAGE_Store_gfx12 { let InOperandList = !con((ins DataRC:$vdata), AddrIns, - (ins SReg_256:$rsrc, DMask:$dmask, Dim:$dim, + (ins SReg_256_XNULL:$rsrc, DMask:$dmask, Dim:$dim, CPol:$cpol, R128A16:$r128, A16:$a16, TFE:$tfe), !if(BaseOpcode.HasD16, (ins D16:$d16), (ins))); let AsmString = opcode#" $vdata, "#AddrAsm#", $rsrc$dmask$dim$cpol$r128$a16$tfe" @@ -875,7 +875,7 @@ class MIMG_Atomic_gfx6789_base op, string asm, RegisterClass data_rc, : MIMG_gfx6789 { let Constraints = "$vdst = $vdata"; - let InOperandList = (ins data_rc:$vdata, addr_rc:$vaddr, SReg_256:$srsrc, + let InOperandList = (ins data_rc:$vdata, addr_rc:$vaddr, SReg_256_XNULL:$srsrc, DMask:$dmask, UNorm:$unorm, CPol:$cpol, R128A16:$r128, TFE:$tfe, LWE:$lwe, DA:$da); let AsmString = asm#" $vdst, $vaddr, $srsrc$dmask$unorm$cpol$r128$tfe$lwe$da"; @@ -887,7 +887,7 @@ class MIMG_Atomic_gfx90a_base op, string asm, RegisterClass data_rc, let Constraints = "$vdst = $vdata"; let InOperandList = (ins getLdStRegisterOperand.ret:$vdata, - addr_rc:$vaddr, SReg_256:$srsrc, + addr_rc:$vaddr, SReg_256_XNULL:$srsrc, DMask:$dmask, UNorm:$unorm, CPol:$cpol, R128A16:$r128, LWE:$lwe, DA:$da); let AsmString = asm#" $vdst, $vaddr, $srsrc$dmask$unorm$cpol$r128$lwe$da"; @@ -921,7 +921,7 @@ class MIMG_Atomic_gfx10 { let Constraints = "$vdst = $vdata"; - let InOperandList = (ins DataRC:$vdata, AddrRC:$vaddr0, SReg_256:$srsrc, + let InOperandList = (ins DataRC:$vdata, AddrRC:$vaddr0, SReg_256_XNULL:$srsrc, DMask:$dmask, Dim:$dim, UNorm:$unorm, CPol:$cpol, R128A16:$r128, A16:$a16, TFE:$tfe, LWE:$lwe); let AsmString = opcode#" $vdst, $vaddr0, $srsrc$dmask$dim$unorm$cpol$r128$a16$tfe$lwe"; @@ -936,7 +936,7 @@ class MIMG_Atomic_nsa_gfx10 { let Constraints = "$vdst = $vdata"; - let InOperandList = (ins DataRC:$vdata, AddrRC:$vaddr0, SReg_256:$srsrc, + let InOperandList = (ins DataRC:$vdata, AddrRC:$vaddr0, SReg_256_XNULL:$srsrc, DMask:$dmask, Dim:$dim, UNorm:$unorm, CPol:$cpol, R128A16:$r128, A16:$a16, TFE:$tfe, LWE:$lwe); let AsmString = opcode#" $vdst, $vaddr0, $srsrc$dmask$dim$unorm$cpol$r128$a16$tfe$lwe"; @@ -964,7 +964,7 @@ class MIMG_Atomic_nsa_gfx11 : MIMG_gfx6789 { - let InOperandList = !con((ins src_rc:$vaddr, SReg_256:$srsrc, SReg_128:$ssamp, + let InOperandList = !con((ins src_rc:$vaddr, SReg_256_XNULL:$srsrc, SReg_128_XNULL:$ssamp, DMask:$dmask, UNorm:$unorm, CPol:$cpol, R128A16:$r128, TFE:$tfe, LWE:$lwe, DA:$da), !if(BaseOpcode.HasD16, (ins D16:$d16), (ins))); @@ -1155,7 +1155,7 @@ class MIMG_Sampler_Helper : MIMG_gfx90a.ret:$vdata), dns> { - let InOperandList = !con((ins src_rc:$vaddr, SReg_256:$srsrc, SReg_128:$ssamp, + let InOperandList = !con((ins src_rc:$vaddr, SReg_256_XNULL:$srsrc, SReg_128_XNULL:$ssamp, DMask:$dmask, UNorm:$unorm, CPol:$cpol, R128A16:$r128, LWE:$lwe, DA:$da), !if(BaseOpcode.HasD16, (ins D16:$d16), (ins))); @@ -1165,7 +1165,7 @@ class MIMG_Sampler_gfx90a { dag ret = !con(OpPrefix, - (ins SReg_256:$srsrc, SReg_128:$ssamp, + (ins SReg_256_XNULL:$srsrc, SReg_128_XNULL:$ssamp, DMask:$dmask, Dim:$dim, UNorm:$unorm, CPol:$cpol, R128A16:$r128, A16:$a16, TFE:$tfe, LWE:$lwe), !if(HasD16, (ins D16:$d16), (ins))); diff --git a/llvm/lib/Target/AMDGPU/SIRegisterInfo.td b/llvm/lib/Target/AMDGPU/SIRegisterInfo.td index 6a349d2bf06ea..f3a962eea7539 100644 --- a/llvm/lib/Target/AMDGPU/SIRegisterInfo.td +++ b/llvm/lib/Target/AMDGPU/SIRegisterInfo.td @@ -809,6 +809,9 @@ def SReg_32 : SIRegisterClass<"AMDGPU", [i32, f32, i16, f16, bf16, v2i16, v2f16, let BaseClassOrder = 32; } +def SGPR_NULL128 : SIReg<"null">; +def SGPR_NULL256 : SIReg<"null">; + let GeneratePressureSet = 0 in { def SRegOrLds_32 : SIRegisterClass<"AMDGPU", [i32, f32, i16, f16, bf16, v2i16, v2f16, v2bf16], 32, (add SReg_32, LDS_DIRECT_CLASS)> { @@ -885,6 +888,7 @@ multiclass SRegClass regTypes, SIRegisterTuples regList, SIRegisterTuples ttmpList = regList, + bit hasNull = 0, int copyCost = !sra(!add(numRegs, 1), 1)> { defvar hasTTMP = !ne(regList, ttmpList); defvar suffix = !cast(!mul(numRegs, 32)); @@ -901,24 +905,33 @@ multiclass SRegClass(sgprName)], ["sgpr"]), - !if(hasTTMP, - !dag(add, [!cast(ttmpName)], ["ttmp"]), - (add)))> { + !con((add !cast(sgprName)), + !if(hasTTMP, + (add !cast(ttmpName)), + (add)))> { let isAllocatable = 0; let BaseClassOrder = !mul(numRegs, 32); } + + if hasNull then { + def SReg_ # suffix : + SIRegisterClass<"AMDGPU", regTypes, 32, + (add !cast("SReg_" # suffix # "_XNULL"), !cast("SGPR_NULL" # suffix))> { + let isAllocatable = 0; + let BaseClassOrder = !mul(numRegs, 32); + } + } } } defm "" : SRegClass<3, Reg96Types.types, SGPR_96Regs, TTMP_96Regs>; -defm "" : SRegClass<4, Reg128Types.types, SGPR_128Regs, TTMP_128Regs>; +defm "" : SRegClass<4, Reg128Types.types, SGPR_128Regs, TTMP_128Regs, /*hasNull*/ true>; defm "" : SRegClass<5, [v5i32, v5f32], SGPR_160Regs, TTMP_160Regs>; defm "" : SRegClass<6, [v6i32, v6f32, v3i64, v3f64], SGPR_192Regs, TTMP_192Regs>; defm "" : SRegClass<7, [v7i32, v7f32], SGPR_224Regs, TTMP_224Regs>; -defm "" : SRegClass<8, [v8i32, v8f32, v4i64, v4f64, v16i16, v16f16, v16bf16], SGPR_256Regs, TTMP_256Regs>; +defm "" : SRegClass<8, [v8i32, v8f32, v4i64, v4f64, v16i16, v16f16, v16bf16], SGPR_256Regs, TTMP_256Regs, /*hasNull*/ true>; defm "" : SRegClass<9, [v9i32, v9f32], SGPR_288Regs, TTMP_288Regs>; defm "" : SRegClass<10, [v10i32, v10f32], SGPR_320Regs, TTMP_320Regs>; defm "" : SRegClass<11, [v11i32, v11f32], SGPR_352Regs, TTMP_352Regs>; diff --git a/llvm/lib/Target/AMDGPU/SMInstructions.td b/llvm/lib/Target/AMDGPU/SMInstructions.td index 1aeb4e8b20e8f..60e4ce92ac25d 100644 --- a/llvm/lib/Target/AMDGPU/SMInstructions.td +++ b/llvm/lib/Target/AMDGPU/SMInstructions.td @@ -332,15 +332,15 @@ defm S_LOAD_I16 : SM_Pseudo_Loads ; defm S_LOAD_U16 : SM_Pseudo_Loads ; let is_buffer = 1 in { -defm S_BUFFER_LOAD_DWORD : SM_Pseudo_Loads ; +defm S_BUFFER_LOAD_DWORD : SM_Pseudo_Loads ; // FIXME: exec_lo/exec_hi appear to be allowed for SMRD loads on // SI/CI, bit disallowed for SMEM on VI. -defm S_BUFFER_LOAD_DWORDX2 : SM_Pseudo_Loads ; +defm S_BUFFER_LOAD_DWORDX2 : SM_Pseudo_Loads ; let SubtargetPredicate = HasScalarDwordx3Loads in - defm S_BUFFER_LOAD_DWORDX3 : SM_Pseudo_Loads ; -defm S_BUFFER_LOAD_DWORDX4 : SM_Pseudo_Loads ; -defm S_BUFFER_LOAD_DWORDX8 : SM_Pseudo_Loads ; -defm S_BUFFER_LOAD_DWORDX16 : SM_Pseudo_Loads ; + defm S_BUFFER_LOAD_DWORDX3 : SM_Pseudo_Loads ; +defm S_BUFFER_LOAD_DWORDX4 : SM_Pseudo_Loads ; +defm S_BUFFER_LOAD_DWORDX8 : SM_Pseudo_Loads ; +defm S_BUFFER_LOAD_DWORDX16 : SM_Pseudo_Loads ; defm S_BUFFER_LOAD_I8 : SM_Pseudo_Loads ; defm S_BUFFER_LOAD_U8 : SM_Pseudo_Loads ; defm S_BUFFER_LOAD_I16 : SM_Pseudo_Loads ; @@ -353,9 +353,9 @@ defm S_STORE_DWORDX2 : SM_Pseudo_Stores ; defm S_STORE_DWORDX4 : SM_Pseudo_Stores ; let is_buffer = 1 in { -defm S_BUFFER_STORE_DWORD : SM_Pseudo_Stores ; -defm S_BUFFER_STORE_DWORDX2 : SM_Pseudo_Stores ; -defm S_BUFFER_STORE_DWORDX4 : SM_Pseudo_Stores ; +defm S_BUFFER_STORE_DWORD : SM_Pseudo_Stores ; +defm S_BUFFER_STORE_DWORDX2 : SM_Pseudo_Stores ; +defm S_BUFFER_STORE_DWORDX4 : SM_Pseudo_Stores ; } } // End SubtargetPredicate = HasScalarStores @@ -401,33 +401,33 @@ defm S_SCRATCH_STORE_DWORDX4 : SM_Pseudo_Stores ; let SubtargetPredicate = HasScalarAtomics in { let is_buffer = 1 in { -defm S_BUFFER_ATOMIC_SWAP : SM_Pseudo_Atomics ; -defm S_BUFFER_ATOMIC_CMPSWAP : SM_Pseudo_Atomics ; -defm S_BUFFER_ATOMIC_ADD : SM_Pseudo_Atomics ; -defm S_BUFFER_ATOMIC_SUB : SM_Pseudo_Atomics ; -defm S_BUFFER_ATOMIC_SMIN : SM_Pseudo_Atomics ; -defm S_BUFFER_ATOMIC_UMIN : SM_Pseudo_Atomics ; -defm S_BUFFER_ATOMIC_SMAX : SM_Pseudo_Atomics ; -defm S_BUFFER_ATOMIC_UMAX : SM_Pseudo_Atomics ; -defm S_BUFFER_ATOMIC_AND : SM_Pseudo_Atomics ; -defm S_BUFFER_ATOMIC_OR : SM_Pseudo_Atomics ; -defm S_BUFFER_ATOMIC_XOR : SM_Pseudo_Atomics ; -defm S_BUFFER_ATOMIC_INC : SM_Pseudo_Atomics ; -defm S_BUFFER_ATOMIC_DEC : SM_Pseudo_Atomics ; - -defm S_BUFFER_ATOMIC_SWAP_X2 : SM_Pseudo_Atomics ; -defm S_BUFFER_ATOMIC_CMPSWAP_X2 : SM_Pseudo_Atomics ; -defm S_BUFFER_ATOMIC_ADD_X2 : SM_Pseudo_Atomics ; -defm S_BUFFER_ATOMIC_SUB_X2 : SM_Pseudo_Atomics ; -defm S_BUFFER_ATOMIC_SMIN_X2 : SM_Pseudo_Atomics ; -defm S_BUFFER_ATOMIC_UMIN_X2 : SM_Pseudo_Atomics ; -defm S_BUFFER_ATOMIC_SMAX_X2 : SM_Pseudo_Atomics ; -defm S_BUFFER_ATOMIC_UMAX_X2 : SM_Pseudo_Atomics ; -defm S_BUFFER_ATOMIC_AND_X2 : SM_Pseudo_Atomics ; -defm S_BUFFER_ATOMIC_OR_X2 : SM_Pseudo_Atomics ; -defm S_BUFFER_ATOMIC_XOR_X2 : SM_Pseudo_Atomics ; -defm S_BUFFER_ATOMIC_INC_X2 : SM_Pseudo_Atomics ; -defm S_BUFFER_ATOMIC_DEC_X2 : SM_Pseudo_Atomics ; +defm S_BUFFER_ATOMIC_SWAP : SM_Pseudo_Atomics ; +defm S_BUFFER_ATOMIC_CMPSWAP : SM_Pseudo_Atomics ; +defm S_BUFFER_ATOMIC_ADD : SM_Pseudo_Atomics ; +defm S_BUFFER_ATOMIC_SUB : SM_Pseudo_Atomics ; +defm S_BUFFER_ATOMIC_SMIN : SM_Pseudo_Atomics ; +defm S_BUFFER_ATOMIC_UMIN : SM_Pseudo_Atomics ; +defm S_BUFFER_ATOMIC_SMAX : SM_Pseudo_Atomics ; +defm S_BUFFER_ATOMIC_UMAX : SM_Pseudo_Atomics ; +defm S_BUFFER_ATOMIC_AND : SM_Pseudo_Atomics ; +defm S_BUFFER_ATOMIC_OR : SM_Pseudo_Atomics ; +defm S_BUFFER_ATOMIC_XOR : SM_Pseudo_Atomics ; +defm S_BUFFER_ATOMIC_INC : SM_Pseudo_Atomics ; +defm S_BUFFER_ATOMIC_DEC : SM_Pseudo_Atomics ; + +defm S_BUFFER_ATOMIC_SWAP_X2 : SM_Pseudo_Atomics ; +defm S_BUFFER_ATOMIC_CMPSWAP_X2 : SM_Pseudo_Atomics ; +defm S_BUFFER_ATOMIC_ADD_X2 : SM_Pseudo_Atomics ; +defm S_BUFFER_ATOMIC_SUB_X2 : SM_Pseudo_Atomics ; +defm S_BUFFER_ATOMIC_SMIN_X2 : SM_Pseudo_Atomics ; +defm S_BUFFER_ATOMIC_UMIN_X2 : SM_Pseudo_Atomics ; +defm S_BUFFER_ATOMIC_SMAX_X2 : SM_Pseudo_Atomics ; +defm S_BUFFER_ATOMIC_UMAX_X2 : SM_Pseudo_Atomics ; +defm S_BUFFER_ATOMIC_AND_X2 : SM_Pseudo_Atomics ; +defm S_BUFFER_ATOMIC_OR_X2 : SM_Pseudo_Atomics ; +defm S_BUFFER_ATOMIC_XOR_X2 : SM_Pseudo_Atomics ; +defm S_BUFFER_ATOMIC_INC_X2 : SM_Pseudo_Atomics ; +defm S_BUFFER_ATOMIC_DEC_X2 : SM_Pseudo_Atomics ; } defm S_ATOMIC_SWAP : SM_Pseudo_Atomics ; diff --git a/llvm/test/CodeGen/AMDGPU/inline-asm.i128.ll b/llvm/test/CodeGen/AMDGPU/inline-asm.i128.ll index cf9fdbdc34391..2ceaca3497ece 100644 --- a/llvm/test/CodeGen/AMDGPU/inline-asm.i128.ll +++ b/llvm/test/CodeGen/AMDGPU/inline-asm.i128.ll @@ -8,16 +8,16 @@ define amdgpu_kernel void @s_input_output_i128() { ; GFX908-LABEL: name: s_input_output_i128 ; GFX908: bb.0 (%ir-block.0): - ; GFX908-NEXT: INLINEASM &"; def $0", 1 /* sideeffect attdialect */, 7405578 /* regdef:SGPR_128 */, def %12 + ; GFX908-NEXT: INLINEASM &"; def $0", 1 /* sideeffect attdialect */, 7471114 /* regdef:SGPR_128 */, def %12 ; GFX908-NEXT: [[COPY:%[0-9]+]]:sgpr_128 = COPY %12 - ; GFX908-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 7405577 /* reguse:SGPR_128 */, [[COPY]] + ; GFX908-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 7471113 /* reguse:SGPR_128 */, [[COPY]] ; GFX908-NEXT: S_ENDPGM 0 ; ; GFX90A-LABEL: name: s_input_output_i128 ; GFX90A: bb.0 (%ir-block.0): - ; GFX90A-NEXT: INLINEASM &"; def $0", 1 /* sideeffect attdialect */, 7405578 /* regdef:SGPR_128 */, def %10 + ; GFX90A-NEXT: INLINEASM &"; def $0", 1 /* sideeffect attdialect */, 7471114 /* regdef:SGPR_128 */, def %10 ; GFX90A-NEXT: [[COPY:%[0-9]+]]:sgpr_128 = COPY %10 - ; GFX90A-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 7405577 /* reguse:SGPR_128 */, [[COPY]] + ; GFX90A-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 7471113 /* reguse:SGPR_128 */, [[COPY]] ; GFX90A-NEXT: S_ENDPGM 0 %val = tail call i128 asm sideeffect "; def $0", "=s"() call void asm sideeffect "; use $0", "s"(i128 %val) diff --git a/llvm/test/MC/AMDGPU/gfx10_asm_mimg_err.s b/llvm/test/MC/AMDGPU/gfx10_asm_mimg_err.s index bd61ad3908d21..f6ea86ed7fe93 100644 --- a/llvm/test/MC/AMDGPU/gfx10_asm_mimg_err.s +++ b/llvm/test/MC/AMDGPU/gfx10_asm_mimg_err.s @@ -359,3 +359,130 @@ image_sample_c_d_cl_o v[0:3], v[0:7], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_ image_load v[0:1], v0, s[0:7] dmask:0x9 dim:1 D // NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid dim value + +// null is not allowed as SRSRC or SSAMP +image_atomic_add v1, v[10:11], null dmask:0x1 dim:SQ_RSRC_IMG_2D +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_atomic_and v1, v[10:11], null dmask:0x1 dim:SQ_RSRC_IMG_2D +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_atomic_cmpswap v[0:1], v[10:11], null dmask:0x3 dim:SQ_RSRC_IMG_2D +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_atomic_dec v1, v[10:11], null dmask:0x1 dim:SQ_RSRC_IMG_2D +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_atomic_fcmpswap v[1:2], v[2:3], null dmask:0x3 dim:SQ_RSRC_IMG_2D +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_atomic_fmax v1, v[10:11], null dmask:0x1 dim:SQ_RSRC_IMG_2D +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_atomic_fmin v1, v[10:11], null dmask:0x1 dim:SQ_RSRC_IMG_2D +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_atomic_inc v1, v[10:11], null dmask:0x1 dim:SQ_RSRC_IMG_2D +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_atomic_or v1, v[10:11], null dmask:0x1 dim:SQ_RSRC_IMG_2D +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_atomic_smax v1, v[10:11], null dmask:0x1 dim:SQ_RSRC_IMG_2D +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_atomic_smin v1, v[10:11], null dmask:0x1 dim:SQ_RSRC_IMG_2D +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_atomic_sub v1, v[10:11], null dmask:0x1 dim:SQ_RSRC_IMG_2D +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_atomic_swap v1, v[10:11], null dmask:0x1 dim:SQ_RSRC_IMG_2D +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_atomic_umax v1, v[10:11], null dmask:0x1 dim:SQ_RSRC_IMG_2D +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_atomic_umin v1, v[10:11], null dmask:0x1 dim:SQ_RSRC_IMG_2D +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_atomic_xor v1, v[10:11], null dmask:0x1 dim:SQ_RSRC_IMG_2D +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_gather4 v[64:67], v32, null, s[4:11], dmask:0x1 dim:SQ_RSRC_IMG_1D +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_gather4 v[64:67], v32, s[4:11], null dmask:0x1 dim:SQ_RSRC_IMG_1D +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_gather4_b v[64:67], v[32:33], null, s[100:103] dmask:0x1 dim:SQ_RSRC_IMG_1D +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_gather4_b v[64:67], v[32:33], s[4:11], null dmask:0x1 dim:SQ_RSRC_IMG_1D +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_gather4_c v[64:67], v[32:33], null, s[100:103] dmask:0x1 dim:SQ_RSRC_IMG_1D +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_gather4_c v[64:67], v[32:33], s[4:11], null dmask:0x1 dim:SQ_RSRC_IMG_1D +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_gather4h v[64:67], v32, null, s[100:103] dmask:0x1 dim:SQ_RSRC_IMG_1D +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_gather4h v[64:67], v32, s[4:11], null dmask:0x1 dim:SQ_RSRC_IMG_1D +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_gather4_l v[64:67], v[32:33], null, s[100:103] dmask:0x1 dim:SQ_RSRC_IMG_1D +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_gather4_l v[64:67], v[32:33], s[4:11], null dmask:0x1 dim:SQ_RSRC_IMG_1D +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_gather4_o v[64:67], v[32:33], null, s[100:103] dmask:0x1 dim:SQ_RSRC_IMG_1D +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_gather4_o v[64:67], v[32:33], s[4:11], null dmask:0x1 dim:SQ_RSRC_IMG_1D +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_load v[4:7], v0, null dmask:0xf dim:SQ_RSRC_IMG_1D +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_store v[0:3], v[254:255], null dmask:0xf dim:SQ_RSRC_IMG_2D +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_sample v[5:6], v1, null, s[12:15] dmask:0x3 dim:SQ_RSRC_IMG_1D +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_sample v[5:6], v1, s[8:15], null dmask:0x3 dim:SQ_RSRC_IMG_1D +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_sample_b v[5:6], v[1:2], null, s[12:15] dmask:0x3 dim:SQ_RSRC_IMG_1D +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_sample_b v[5:6], v[1:2], s[8:15], null dmask:0x3 dim:SQ_RSRC_IMG_1D +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_sample_c v[5:6], v[1:2], null, s[12:15] dmask:0x3 dim:SQ_RSRC_IMG_1D +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_sample_c v[5:6], v[1:2], s[8:15], null dmask:0x3 dim:SQ_RSRC_IMG_1D +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_sample_d v[5:6], v[1:3], null, s[12:15] dmask:0x3 dim:SQ_RSRC_IMG_1D +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_sample_d v[5:6], v[1:3], s[8:15], null dmask:0x3 dim:SQ_RSRC_IMG_1D +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_sample_l v[5:6], v[1:2], null, s[12:15] dmask:0x3 dim:SQ_RSRC_IMG_1D +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_sample_l v[5:6], v[1:2], s[8:15], null dmask:0x3 dim:SQ_RSRC_IMG_1D +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_sample_o v[5:6], v[1:2], null, s[12:15] dmask:0x3 dim:SQ_RSRC_IMG_1D +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_sample_o v[5:6], v[1:2], s[8:15], null dmask:0x3 dim:SQ_RSRC_IMG_1D +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction diff --git a/llvm/test/MC/AMDGPU/gfx10_asm_mtbuf_err.s b/llvm/test/MC/AMDGPU/gfx10_asm_mtbuf_err.s new file mode 100644 index 0000000000000..5eb2e9c579a7d --- /dev/null +++ b/llvm/test/MC/AMDGPU/gfx10_asm_mtbuf_err.s @@ -0,0 +1,49 @@ +// RUN: not llvm-mc -triple=amdgcn -mcpu=gfx1010 %s 2>&1 | FileCheck --check-prefixes=NOGFX10 --implicit-check-not=error: %s + +tbuffer_load_format_d16_x v3, v0, null, s1 offen offset:4095 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +tbuffer_load_format_d16_xy v[3:4], v0, null, s1 offen offset:4095 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +tbuffer_load_format_d16_xyz v[3:5], v0, null, s1 offen offset:4095 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +tbuffer_load_format_d16_xyzw v[3:6], v0, null, s1 offen offset:4095 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +tbuffer_load_format_x v3, v0, null, s1 offen offset:4095 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +tbuffer_load_format_xy v[3:4], v0, null, s1 offen offset:4095 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +tbuffer_load_format_xyz v[3:5], v0, null, s1 offen offset:4095 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +tbuffer_load_format_xyzw v[3:6], v0, null, s1 offen offset:4095 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +tbuffer_store_format_d16_x v3, v0, null, s1 offen offset:4095 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +tbuffer_store_format_d16_xy v[3:4], v0, null, s1 offen offset:4095 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +tbuffer_store_format_d16_xyz v[3:5], v0, null, s1 offen offset:4095 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +tbuffer_store_format_d16_xyzw v[3:6], v0, null, s1 offen offset:4095 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +tbuffer_store_format_x v3, v0, null, s1 offen offset:4095 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +tbuffer_store_format_xy v[3:4], v0, null, s1 offen offset:4095 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +tbuffer_store_format_xyz v[3:5], v0, null, s1 offen offset:4095 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +tbuffer_store_format_xyzw v[3:6], v0, null, s1 offen offset:4095 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction diff --git a/llvm/test/MC/AMDGPU/gfx10_asm_mubuf_err.s b/llvm/test/MC/AMDGPU/gfx10_asm_mubuf_err.s new file mode 100644 index 0000000000000..bd7acfeb4b033 --- /dev/null +++ b/llvm/test/MC/AMDGPU/gfx10_asm_mubuf_err.s @@ -0,0 +1,160 @@ +// RUN: not llvm-mc -triple=amdgcn -mcpu=gfx1010 %s 2>&1 | FileCheck --check-prefixes=NOGFX10 --implicit-check-not=error: %s + +buffer_atomic_add v5, v0, null, s3 idxen +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_add_x2 v[5:6], v0, null, s3 idxen +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_and v5, v0, null, s3 idxen +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_and_x2 v[5:6], v0, null, s3 idxen +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_cmpswap v[5:6], v0, null, s3 idxen +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_cmpswap_x2 v[5:8], v0, null, s3 idxen +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_dec v5, v0, null, s3 idxen +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_dec_x2 v[5:6], v0, null, s3 idxen +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_inc v5, v0, null, s3 idxen +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_inc_x2 v[5:6], v0, null, s3 idxen +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_or v5, v0, null, s3 idxen +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_or_x2 v[5:6], v0, null, s3 idxen +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_smax v5, v0, null, s3 idxen +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_smax_x2 v[5:6], v0, null, s3 idxen +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_smin v5, v0, null, s3 idxen +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_smin_x2 v[5:6], v0, null, s3 idxen +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_sub v5, v0, null, s3 idxen +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_sub_x2 v[5:6], v0, null, s3 idxen +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_swap v5, v0, null, s3 idxen +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_swap_x2 v[5:6], v0, null, s3 idxen +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_umax v5, v0, null, s3 idxen +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_umax_x2 v[5:6], v0, null, s3 idxen +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_umin v5, v0, null, s3 idxen +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_umin_x2 v[5:6], v0, null, s3 idxen +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_xor v5, v0, null, s3 idxen +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_xor_x2 v[5:6], v0, null, s3 idxen +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_format_d16_x v3, v0, null, s1 offen offset:4095 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_format_x v3, v0, null, s1 offen offset:4095 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_format_xy v[3:4], v0, null, s1 offen offset:4095 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_format_xyz v[3:5], v0, null, s1 offen offset:4095 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_format_xyzw v[3:6], v0, null, s1 offen offset:4095 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_dword v5, v0, null, s3 offen offset:4095 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_dwordx2 v[5:6], v0, null, s3 offen offset:4095 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_dwordx3 v[5:7], v0, null, s3 offen offset:4095 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_dwordx4 v[5:8], v0, null, s3 offen offset:4095 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_sbyte v5, v0, null, s3 idxen offset:4095 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_sshort v5, v0, null, s3 idxen offset:4095 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_ubyte v5, v0, null, s3 idxen offset:4095 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_ushort v5, v0, null, s3 idxen offset:4095 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_byte v1, v0, null, s4 idxen offset:4095 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_dword v1, v0, null, s4 idxen offset:4095 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_dwordx2 v[1:2], v0, null, s4 idxen offset:4095 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_dwordx3 v[1:3], v0, null, s4 idxen offset:4095 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_dwordx4 v[1:4], v0, null, s4 idxen offset:4095 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_format_d16_hi_x v1, v0, null, s1 offen offset:4095 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_format_d16_x v1, v0, null, s1 offen offset:4095 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_format_d16_xy v1, v0, null, s1 offen offset:4095 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_format_d16_xyz v[1:2], v0, null, s1 offen offset:4095 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_format_d16_xyzw v[1:3], v0, null, s1 offen offset:4095 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_format_x v1, v0, null, s1 offen offset:4095 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_format_xy v[1:2], v0, null, s1 offen offset:4095 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_format_xyz v[1:3], v0, null, s1 offen offset:4095 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_format_xyzw v[1:4], v0, null, s1 offen offset:4095 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction diff --git a/llvm/test/MC/AMDGPU/gfx10_asm_smem.s b/llvm/test/MC/AMDGPU/gfx10_asm_smem.s index b582de83a2f29..683a0195037cf 100644 --- a/llvm/test/MC/AMDGPU/gfx10_asm_smem.s +++ b/llvm/test/MC/AMDGPU/gfx10_asm_smem.s @@ -281,6 +281,22 @@ s_load_dwordx16 s[20:35], s[2:3], 0x1234 glc dlc s_load_dwordx16 s[20:35], s[2:3], s0 offset:0x12345 glc dlc // GFX10: encoding: [0x01,0x45,0x11,0xf4,0x45,0x23,0x01,0x00] +// null as dst +s_load_dword null, s[2:3], s0 +// GFX10: encoding: [0x41,0x1f,0x00,0xf4,0x00,0x00,0x00,0x00] + +s_load_dwordx2 null, s[2:3], s0 +// GFX10: encoding: [0x41,0x1f,0x04,0xf4,0x00,0x00,0x00,0x00] + +s_load_dwordx4 null, s[2:3], s0 +// GFX10: encoding: [0x41,0x1f,0x08,0xf4,0x00,0x00,0x00,0x00] + +s_load_dwordx8 null, s[2:3], s0 +// GFX10: encoding: [0x41,0x1f,0x0c,0xf4,0x00,0x00,0x00,0x00] + +s_load_dwordx16 null, s[2:3], s0 +// GFX10: encoding: [0x41,0x1f,0x10,0xf4,0x00,0x00,0x00,0x00] + s_buffer_load_dword s5, s[4:7], s0 // GFX10: encoding: [0x42,0x01,0x20,0xf4,0x00,0x00,0x00,0x00] diff --git a/llvm/test/MC/AMDGPU/gfx10_asm_smem_err.s b/llvm/test/MC/AMDGPU/gfx10_asm_smem_err.s new file mode 100644 index 0000000000000..670e97325355b --- /dev/null +++ b/llvm/test/MC/AMDGPU/gfx10_asm_smem_err.s @@ -0,0 +1,86 @@ +// RUN: not llvm-mc -triple=amdgcn -mcpu=gfx1010 %s 2>&1 | FileCheck --check-prefixes=NOGFX10 --implicit-check-not=error: %s + +s_buffer_atomic_add s4, null, s101 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +s_buffer_atomic_add_x2 s[4:5], null, s101 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +s_buffer_atomic_and s4, null, s101 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +s_buffer_atomic_cmpswap s[4:5], null, s101 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +s_buffer_atomic_cmpswap_x2 s[4:7], null, s101 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +s_buffer_atomic_dec s4, null, s101 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +s_buffer_atomic_dec_x2 s[4:5], null, s101 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +s_buffer_atomic_inc s4, null, s101 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +s_buffer_atomic_inc_x2 s[4:5], null, s101 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +s_buffer_atomic_or s4, null, s101 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +s_buffer_atomic_or_x2 s[4:5], null, s101 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +s_buffer_atomic_smax s4, null, s101 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +s_buffer_atomic_smax_x2 s[4:5], null, s101 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +s_buffer_atomic_smin s4, null, s101 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +s_buffer_atomic_smin_x2 s[4:5], null, s101 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +s_buffer_atomic_sub s4, null, s101 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +s_buffer_atomic_sub_x2 s[4:5], null, s101 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +s_buffer_atomic_swap s4, null, s101 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +s_buffer_atomic_umax s4, null, s101 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +s_buffer_atomic_umax_x2 s[4:5], null, s101 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +s_buffer_atomic_umin s4, null, s101 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +s_buffer_atomic_umin_x2 s[4:5], null, s101 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +s_buffer_load_dword s4, null, s101 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +s_buffer_load_dwordx2 s[4:5], null, s101 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +s_buffer_load_dwordx4 s[4:7], null, s101 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +s_buffer_load_dwordx8 s[4:11], null, s101 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +s_buffer_load_dwordx16 s[4:19], null, s101 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +s_buffer_store_dword s4, null, s101 +// NOGFX10: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + diff --git a/llvm/test/MC/AMDGPU/gfx11_asm_mimg_err.s b/llvm/test/MC/AMDGPU/gfx11_asm_mimg_err.s index 9bf72a11e5eed..9c614453c1ebd 100644 --- a/llvm/test/MC/AMDGPU/gfx11_asm_mimg_err.s +++ b/llvm/test/MC/AMDGPU/gfx11_asm_mimg_err.s @@ -400,3 +400,120 @@ image_store_pck v1, v[2:3], s[12:19] dmask:0x1 unorm image_store_mip_pck v1, v[2:3], s[12:19] dmask:0x0 unorm // NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: missing dim operand +// null is not allowed as SRSRC or SSAMP +image_atomic_add v1, v[10:11], null dmask:0x1 dim:SQ_RSRC_IMG_2D +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_atomic_and v1, v[10:11], null dmask:0x1 dim:SQ_RSRC_IMG_2D +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_atomic_cmpswap v[0:1], v[10:11], null dmask:0x3 dim:SQ_RSRC_IMG_2D +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_atomic_dec v1, v[10:11], null dmask:0x1 dim:SQ_RSRC_IMG_2D +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_atomic_inc v1, v[10:11], null dmask:0x1 dim:SQ_RSRC_IMG_2D +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_atomic_or v1, v[10:11], null dmask:0x1 dim:SQ_RSRC_IMG_2D +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_atomic_smax v1, v[10:11], null dmask:0x1 dim:SQ_RSRC_IMG_2D +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_atomic_smin v1, v[10:11], null dmask:0x1 dim:SQ_RSRC_IMG_2D +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_atomic_sub v1, v[10:11], null dmask:0x1 dim:SQ_RSRC_IMG_2D +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_atomic_swap v1, v[10:11], null dmask:0x1 dim:SQ_RSRC_IMG_2D +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_atomic_umax v1, v[10:11], null dmask:0x1 dim:SQ_RSRC_IMG_2D +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_atomic_umin v1, v[10:11], null dmask:0x1 dim:SQ_RSRC_IMG_2D +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_atomic_xor v1, v[10:11], null dmask:0x1 dim:SQ_RSRC_IMG_2D +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_gather4 v[64:67], v32, null, s[4:11], dmask:0x1 dim:SQ_RSRC_IMG_1D +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_gather4 v[64:67], v32, s[4:11], null dmask:0x1 dim:SQ_RSRC_IMG_1D +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_gather4_b v[64:67], v[32:33], null, s[100:103] dmask:0x1 dim:SQ_RSRC_IMG_1D +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_gather4_b v[64:67], v[32:33], s[4:11], null dmask:0x1 dim:SQ_RSRC_IMG_1D +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_gather4_c v[64:67], v[32:33], null, s[100:103] dmask:0x1 dim:SQ_RSRC_IMG_1D +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_gather4_c v[64:67], v[32:33], s[4:11], null dmask:0x1 dim:SQ_RSRC_IMG_1D +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_gather4h v[64:67], v32, null, s[100:103] dmask:0x1 dim:SQ_RSRC_IMG_1D +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_gather4h v[64:67], v32, s[4:11], null dmask:0x1 dim:SQ_RSRC_IMG_1D +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_gather4_l v[64:67], v[32:33], null, s[100:103] dmask:0x1 dim:SQ_RSRC_IMG_1D +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_gather4_l v[64:67], v[32:33], s[4:11], null dmask:0x1 dim:SQ_RSRC_IMG_1D +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_gather4_o v[64:67], v[32:33], null, s[100:103] dmask:0x1 dim:SQ_RSRC_IMG_1D +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_gather4_o v[64:67], v[32:33], s[4:11], null dmask:0x1 dim:SQ_RSRC_IMG_1D +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_load v[4:7], v0, null dmask:0xf dim:SQ_RSRC_IMG_1D +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_store v[0:3], v[254:255], null dmask:0xf dim:SQ_RSRC_IMG_2D +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_sample v[5:6], v1, null, s[12:15] dmask:0x3 dim:SQ_RSRC_IMG_1D +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_sample v[5:6], v1, s[8:15], null dmask:0x3 dim:SQ_RSRC_IMG_1D +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_sample_b v[5:6], v[1:2], null, s[12:15] dmask:0x3 dim:SQ_RSRC_IMG_1D +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_sample_b v[5:6], v[1:2], s[8:15], null dmask:0x3 dim:SQ_RSRC_IMG_1D +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_sample_c v[5:6], v[1:2], null, s[12:15] dmask:0x3 dim:SQ_RSRC_IMG_1D +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_sample_c v[5:6], v[1:2], s[8:15], null dmask:0x3 dim:SQ_RSRC_IMG_1D +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_sample_d v[5:6], v[1:3], null, s[12:15] dmask:0x3 dim:SQ_RSRC_IMG_1D +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_sample_d v[5:6], v[1:3], s[8:15], null dmask:0x3 dim:SQ_RSRC_IMG_1D +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_sample_l v[5:6], v[1:2], null, s[12:15] dmask:0x3 dim:SQ_RSRC_IMG_1D +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_sample_l v[5:6], v[1:2], s[8:15], null dmask:0x3 dim:SQ_RSRC_IMG_1D +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_sample_o v[5:6], v[1:2], null, s[12:15] dmask:0x3 dim:SQ_RSRC_IMG_1D +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_sample_o v[5:6], v[1:2], s[8:15], null dmask:0x3 dim:SQ_RSRC_IMG_1D +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction diff --git a/llvm/test/MC/AMDGPU/gfx11_asm_mtbuf_err.s b/llvm/test/MC/AMDGPU/gfx11_asm_mtbuf_err.s new file mode 100644 index 0000000000000..3b69835c8eb51 --- /dev/null +++ b/llvm/test/MC/AMDGPU/gfx11_asm_mtbuf_err.s @@ -0,0 +1,49 @@ +// RUN: not llvm-mc -triple=amdgcn -mcpu=gfx1100 %s 2>&1 | FileCheck --check-prefixes=NOGFX11 --implicit-check-not=error: %s + +tbuffer_load_format_d16_x v3, v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +tbuffer_load_format_d16_xy v[3:4], v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +tbuffer_load_format_d16_xyz v[3:5], v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +tbuffer_load_format_d16_xyzw v[3:6], v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +tbuffer_load_format_x v3, v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +tbuffer_load_format_xy v[3:4], v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +tbuffer_load_format_xyz v[3:5], v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +tbuffer_load_format_xyzw v[3:6], v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +tbuffer_store_format_d16_x v3, v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +tbuffer_store_format_d16_xy v[3:4], v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +tbuffer_store_format_d16_xyz v[3:5], v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +tbuffer_store_format_d16_xyzw v[3:6], v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +tbuffer_store_format_x v3, v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +tbuffer_store_format_xy v[3:4], v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +tbuffer_store_format_xyz v[3:5], v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +tbuffer_store_format_xyzw v[3:6], v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction diff --git a/llvm/test/MC/AMDGPU/gfx11_asm_mubuf_err.s b/llvm/test/MC/AMDGPU/gfx11_asm_mubuf_err.s new file mode 100644 index 0000000000000..d3d74467d8099 --- /dev/null +++ b/llvm/test/MC/AMDGPU/gfx11_asm_mubuf_err.s @@ -0,0 +1,229 @@ +// RUN: not llvm-mc -triple=amdgcn -mcpu=gfx1100 %s 2>&1 | FileCheck --check-prefixes=NOGFX11 --implicit-check-not=error: %s + +buffer_atomic_add_f32 v5, v0, null, s3 idxen +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_add_u32 v5, v0, null, s3 idxen +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_add_u64 v[5:6], v0, null, s3 idxen +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_and_b32 v5, v0, null, s3 idxen +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_and_b64 v[5:6], v0, null, s3 idxen +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_cmpswap_b32 v[5:6], v0, null, s3 idxen +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_cmpswap_b64 v[5:8], v0, null, s3 idxen +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_cmpswap_f32 v[5:6], v0, null, s3 idxen +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_csub_u32 v5, v0, null, s3 idxen +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_dec_u32 v5, v0, null, s3 idxen +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_dec_u64 v[5:6], v0, null, s3 idxen +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_inc_u32 v5, v0, null, s3 idxen +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_inc_u64 v[5:6], v0, null, s3 idxen +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_max_f32 v5, v0, null, s3 idxen +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_max_i32 v5, v0, null, s3 idxen +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_max_i64 v[5:6], v0, null, s3 idxen +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_max_u32 v5, v0, null, s3 idxen +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_max_u64 v[5:6], v0, null, s3 idxen +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_min_f32 v5, v0, null, s3 idxen +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_min_i32 v5, v0, null, s3 idxen +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_min_i64 v[5:6], v0, null, s3 idxen +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_min_u32 v5, v0, null, s3 idxen +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_min_u64 v[5:6], v0, null, s3 idxen +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_or_b32 v5, v0, null, s3 idxen +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_or_b64 v[5:6], v0, null, s3 idxen +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_sub_u32 v5, v0, null, s3 idxen +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_sub_u64 v[5:6], v0, null, s3 idxen +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_swap_b32 v5, v0, null, s3 idxen +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_swap_b64 v[5:6], v0, null, s3 idxen +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_xor_b32 v5, v0, null, s3 idxen +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_xor_b64 v[5:6], v0, null, s3 idxen +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_b128 v[5:8], v0, null, s3 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_b32 v5, v0, null, s3 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_b64 v[1:2], v0, null, s4 idxen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_b96 v[1:3], v0, null, s4 idxen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_d16_b16 v5, v0, null, s3 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_d16_format_x v3, v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_d16_format_xy v3, v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_d16_format_xyz v[3:4], v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_d16_format_xyzw v[3:4], v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_d16_hi_b16 v3, v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_d16_hi_format_x v3, v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_d16_hi_i8 v3, v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_d16_hi_u8 v3, v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_d16_i8 v3, v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_d16_u8 v3, v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_format_x v3, v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_format_xy v[3:4], v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_format_xyz v[3:5], v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_format_xyzw v[3:6], v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_i16 v3, v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_i8 v3, v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_lds_b32 v3, v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_lds_format_x v3, v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_lds_i16 v3, v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_lds_i8 v3, v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_lds_u16 v3, v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_lds_u8 v3, v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_u16 v3, v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_u8 v3, v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_b16 v3, v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_b32 v3, v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_b64 v[3:4], v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_b8 v3, v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_b96 v[3:5], v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_d16_format_x v3, v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_d16_format_xy v3, v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_d16_format_xyz v[3:4], v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_d16_format_xyzw v[3:4], v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_d16_hi_b16 v3, v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_d16_hi_b8 v3, v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_d16_hi_format_x v3, v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_format_x v1, v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_format_xy v[1:2], v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_format_xyz v[1:3], v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_format_xyzw v[1:4], v0, null, s1 offen offset:4095 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction diff --git a/llvm/test/MC/AMDGPU/gfx11_asm_smem.s b/llvm/test/MC/AMDGPU/gfx11_asm_smem.s index 1d6b947609075..e071c67f85891 100644 --- a/llvm/test/MC/AMDGPU/gfx11_asm_smem.s +++ b/llvm/test/MC/AMDGPU/gfx11_asm_smem.s @@ -239,6 +239,22 @@ s_load_b512 s[20:35], s[2:3], s0 glc dlc s_load_b512 s[20:35], s[2:3], 0x1234 glc dlc // GFX11: encoding: [0x01,0x65,0x10,0xf4,0x34,0x12,0x00,0xf8] +// null as dst +s_load_b32 null, s[2:3], s0 +// GFX11: encoding: [0x01,0x1f,0x00,0xf4,0x00,0x00,0x00,0x00] + +s_load_b64 null, s[2:3], s0 +// GFX11: encoding: [0x01,0x1f,0x04,0xf4,0x00,0x00,0x00,0x00] + +s_load_b128 null, s[2:3], s0 +// GFX11: encoding: [0x01,0x1f,0x08,0xf4,0x00,0x00,0x00,0x00] + +s_load_b256 null, s[2:3], s0 +// GFX11: encoding: [0x01,0x1f,0x0c,0xf4,0x00,0x00,0x00,0x00] + +s_load_b512 null, s[2:3], s0 +// GFX11: encoding: [0x01,0x1f,0x10,0xf4,0x00,0x00,0x00,0x00] + s_buffer_load_b32 s5, s[4:7], s0 // GFX11: encoding: [0x42,0x01,0x20,0xf4,0x00,0x00,0x00,0x00] diff --git a/llvm/test/MC/AMDGPU/gfx11_asm_smem_err.s b/llvm/test/MC/AMDGPU/gfx11_asm_smem_err.s new file mode 100644 index 0000000000000..da195b4a41182 --- /dev/null +++ b/llvm/test/MC/AMDGPU/gfx11_asm_smem_err.s @@ -0,0 +1,31 @@ +// RUN: not llvm-mc -triple=amdgcn -mcpu=gfx1100 %s 2>&1 | FileCheck --check-prefixes=NOGFX11 --implicit-check-not=error: %s + +s_buffer_load_b32 s4, null, s101 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +s_buffer_load_b64 s4, null, s101 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +s_buffer_load_b128 s4, null, s101 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +s_buffer_load_b256 s4, null, s101 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +s_buffer_load_b512 s4, null, s101 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +s_buffer_load_dword s4, null, s101 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +s_buffer_load_dwordx2 s[4:5], null, s101 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +s_buffer_load_dwordx4 s[4:7], null, s101 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +s_buffer_load_dwordx8 s[4:11], null, s101 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +s_buffer_load_dwordx16 s[4:19], null, s101 +// NOGFX11: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction diff --git a/llvm/test/MC/AMDGPU/gfx12_asm_mimg_err.s b/llvm/test/MC/AMDGPU/gfx12_asm_mimg_err.s index a0d11c985c6b7..0f2cfc39e2ec8 100644 --- a/llvm/test/MC/AMDGPU/gfx12_asm_mimg_err.s +++ b/llvm/test/MC/AMDGPU/gfx12_asm_mimg_err.s @@ -255,3 +255,122 @@ image_store_pck v5, v1, s[8:15] dmask:0x1 th:TH_STORE_NT image_store_mip_pck v5, [v0, v1], s[8:15] dmask:0x1 th:TH_STORE_NT // NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: missing dim operand + +// null is not allowed as SRSRC or SSAMP +image_atomic_add v1, v[10:11], null dmask:0x1 dim:SQ_RSRC_IMG_2D +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_atomic_and v1, v[10:11], null dmask:0x1 dim:SQ_RSRC_IMG_2D +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_atomic_cmpswap v[0:1], v[10:11], null dmask:0x3 dim:SQ_RSRC_IMG_2D +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_atomic_dec v1, v[10:11], null dmask:0x1 dim:SQ_RSRC_IMG_2D +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_atomic_inc v1, v[10:11], null dmask:0x1 dim:SQ_RSRC_IMG_2D +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_atomic_or v1, v[10:11], null dmask:0x1 dim:SQ_RSRC_IMG_2D +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_atomic_smax v1, v[10:11], null dmask:0x1 dim:SQ_RSRC_IMG_2D +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_atomic_smin v1, v[10:11], null dmask:0x1 dim:SQ_RSRC_IMG_2D +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_atomic_sub v1, v[10:11], null dmask:0x1 dim:SQ_RSRC_IMG_2D +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_atomic_swap v1, v[10:11], null dmask:0x1 dim:SQ_RSRC_IMG_2D +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_atomic_umax v1, v[10:11], null dmask:0x1 dim:SQ_RSRC_IMG_2D +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_atomic_umin v1, v[10:11], null dmask:0x1 dim:SQ_RSRC_IMG_2D +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_atomic_xor v1, v[10:11], null dmask:0x1 dim:SQ_RSRC_IMG_2D +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_gather4 v[64:67], v32, null, s[4:11], dmask:0x1 dim:SQ_RSRC_IMG_1D +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_gather4 v[64:67], v32, s[4:11], null dmask:0x1 dim:SQ_RSRC_IMG_1D +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_gather4_b v[64:67], [v32, v33], null, s[100:103] dmask:0x1 dim:SQ_RSRC_IMG_1D +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_gather4_b v[64:67], [v32, v33], s[4:11], null dmask:0x1 dim:SQ_RSRC_IMG_1D +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_gather4_c v[64:67], [v32, v33], null, s[100:103] dmask:0x1 dim:SQ_RSRC_IMG_1D +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_gather4_c v[64:67], [v32, v33], s[4:11], null dmask:0x1 dim:SQ_RSRC_IMG_1D +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_gather4h v[64:67], v32, null, s[100:103] dmask:0x1 dim:SQ_RSRC_IMG_1D +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_gather4h v[64:67], v32, s[4:11], null dmask:0x1 dim:SQ_RSRC_IMG_1D +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_gather4_l v[64:67], v[32:33], null, s[100:103] dmask:0x1 dim:SQ_RSRC_IMG_1D +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_gather4_l v[64:67], v[32:33], s[4:11], null dmask:0x1 dim:SQ_RSRC_IMG_1D +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_gather4_o v[64:67], [v32, v33], null, s[100:103] dmask:0x1 dim:SQ_RSRC_IMG_1D +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_gather4_o v[64:67], [v32, v33], s[4:11], null dmask:0x1 dim:SQ_RSRC_IMG_1D +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_load v[4:7], v0, null dmask:0xf dim:SQ_RSRC_IMG_1D +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_store v[0:3], v[254:255], null dmask:0xf dim:SQ_RSRC_IMG_2D +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_sample v[5:6], v1, null, s[12:15] dmask:0x3 dim:SQ_RSRC_IMG_1D +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_sample v[5:6], v1, s[8:15], null dmask:0x3 dim:SQ_RSRC_IMG_1D +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_sample_b v[5:6], [v1, v2], null, s[12:15] dmask:0x3 dim:SQ_RSRC_IMG_1D +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_sample_b v[5:6], [v1, v2], s[8:15], null dmask:0x3 dim:SQ_RSRC_IMG_1D +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_sample_c v[5:6], [v1, v2], null, s[12:15] dmask:0x3 dim:SQ_RSRC_IMG_1D +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_sample_c v[5:6], [v1, v2], s[8:15], null dmask:0x3 dim:SQ_RSRC_IMG_1D +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_sample_d v[5:6], [v1, v2, v3], null, s[12:15] dmask:0x3 dim:SQ_RSRC_IMG_1D +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_sample_d v[5:6], [v1, v2, v3], s[8:15], null dmask:0x3 dim:SQ_RSRC_IMG_1D +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_sample_l v[5:6], v[1:2], null, s[12:15] dmask:0x3 dim:SQ_RSRC_IMG_1D +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_sample_l v[5:6], v[1:2], s[8:15], null dmask:0x3 dim:SQ_RSRC_IMG_1D +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_sample_o v[5:6], [v1, v2], null, s[12:15] dmask:0x3 dim:SQ_RSRC_IMG_1D +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +image_sample_o v[5:6], [v1, v2], s[8:15], null dmask:0x3 dim:SQ_RSRC_IMG_1D +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + diff --git a/llvm/test/MC/AMDGPU/gfx12_asm_smem.s b/llvm/test/MC/AMDGPU/gfx12_asm_smem.s index 668f767661f68..2ef027459fa6a 100644 --- a/llvm/test/MC/AMDGPU/gfx12_asm_smem.s +++ b/llvm/test/MC/AMDGPU/gfx12_asm_smem.s @@ -541,6 +541,25 @@ s_load_b512 s[20:35], s[2:3], m0 s_load_b512 s[20:35], s[2:3], 0x0 // GFX12: s_load_b512 s[20:35], s[2:3], 0x0 ; encoding: [0x01,0x85,0x00,0xf4,0x00,0x00,0x00,0xf8] +// null as dst +s_load_b32 null, s[2:3], s0 offset:0x0 +// GFX12: encoding: [0x01,0x1f,0x00,0xf4,0x00,0x00,0x00,0x00] + +s_load_b64 null, s[2:3], s0 offset:0x0 +// GFX12: encoding: [0x01,0x3f,0x00,0xf4,0x00,0x00,0x00,0x00] + +s_load_b96 null, s[2:3], s0 offset:0x0 +// GFX12: encoding: [0x01,0xbf,0x00,0xf4,0x00,0x00,0x00,0x00] + +s_load_b128 null, s[2:3], s0 offset:0x0 +// GFX12: encoding: [0x01,0x5f,0x00,0xf4,0x00,0x00,0x00,0x00] + +s_load_b256 null, s[2:3], s0 offset:0x0 +// GFX12: encoding: [0x01,0x7f,0x00,0xf4,0x00,0x00,0x00,0x00] + +s_load_b512 null, s[2:3], s0 offset:0x0 +// GFX12: encoding: [0x01,0x9f,0x00,0xf4,0x00,0x00,0x00,0x00] + s_buffer_load_b32 s5, s[4:7], s0 // GFX12: s_buffer_load_b32 s5, s[4:7], s0 offset:0x0 ; encoding: [0x42,0x01,0x02,0xf4,0x00,0x00,0x00,0x00] diff --git a/llvm/test/MC/AMDGPU/gfx12_asm_smem_err.s b/llvm/test/MC/AMDGPU/gfx12_asm_smem_err.s new file mode 100644 index 0000000000000..0f62c8b939991 --- /dev/null +++ b/llvm/test/MC/AMDGPU/gfx12_asm_smem_err.s @@ -0,0 +1,31 @@ +// RUN: not llvm-mc -triple=amdgcn -mcpu=gfx1200 %s 2>&1 | FileCheck --check-prefixes=NOGFX12 --implicit-check-not=error: %s + +s_buffer_load_b32 s4, null, s101 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +s_buffer_load_b64 s4, null, s101 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +s_buffer_load_b128 s4, null, s101 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +s_buffer_load_b256 s4, null, s101 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +s_buffer_load_b512 s4, null, s101 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +s_buffer_load_dword s4, null, s101 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +s_buffer_load_dwordx2 s[4:5], null, s101 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +s_buffer_load_dwordx4 s[4:7], null, s101 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +s_buffer_load_dwordx8 s[4:11], null, s101 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +s_buffer_load_dwordx16 s[4:19], null, s101 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction diff --git a/llvm/test/MC/AMDGPU/gfx12_asm_vbuffer_mtbuf_err.s b/llvm/test/MC/AMDGPU/gfx12_asm_vbuffer_mtbuf_err.s new file mode 100644 index 0000000000000..040119ce892e6 --- /dev/null +++ b/llvm/test/MC/AMDGPU/gfx12_asm_vbuffer_mtbuf_err.s @@ -0,0 +1,49 @@ +// RUN: not llvm-mc -triple=amdgcn -mcpu=gfx1200 %s 2>&1 | FileCheck --check-prefixes=NOGFX12 --implicit-check-not=error: %s + +tbuffer_load_format_d16_x v3, v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +tbuffer_load_format_d16_xy v[3:4], v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +tbuffer_load_format_d16_xyz v[3:5], v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +tbuffer_load_format_d16_xyzw v[3:6], v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +tbuffer_load_format_x v3, v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +tbuffer_load_format_xy v[3:4], v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +tbuffer_load_format_xyz v[3:5], v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +tbuffer_load_format_xyzw v[3:6], v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +tbuffer_store_format_d16_x v3, v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +tbuffer_store_format_d16_xy v[3:4], v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +tbuffer_store_format_d16_xyz v[3:5], v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +tbuffer_store_format_d16_xyzw v[3:6], v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +tbuffer_store_format_x v3, v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +tbuffer_store_format_xy v[3:4], v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +tbuffer_store_format_xyz v[3:5], v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +tbuffer_store_format_xyzw v[3:6], v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction diff --git a/llvm/test/MC/AMDGPU/gfx12_asm_vbuffer_mubuf_err.s b/llvm/test/MC/AMDGPU/gfx12_asm_vbuffer_mubuf_err.s new file mode 100644 index 0000000000000..2c9ce7a7efe21 --- /dev/null +++ b/llvm/test/MC/AMDGPU/gfx12_asm_vbuffer_mubuf_err.s @@ -0,0 +1,220 @@ +// RUN: not llvm-mc -triple=amdgcn -mcpu=gfx1200 %s 2>&1 | FileCheck --check-prefixes=NOGFX12 --implicit-check-not=error: %s + +buffer_atomic_add_f32 v5, v0, null, s3 idxen +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_add_u32 v5, v0, null, s3 idxen +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_add_u64 v[5:6], v0, null, s3 idxen +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_and_b32 v5, v0, null, s3 idxen +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_and_b64 v[5:6], v0, null, s3 idxen +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_cmpswap_b32 v[5:6], v0, null, s3 idxen +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_cmpswap_b64 v[5:8], v0, null, s3 idxen +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_cond_sub_u32 v5, v0, null, s3 idxen +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_dec_u32 v5, v0, null, s3 idxen +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_dec_u64 v[5:6], v0, null, s3 idxen +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_inc_u32 v5, v0, null, s3 idxen +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_inc_u64 v[5:6], v0, null, s3 idxen +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_max_i32 v5, v0, null, s3 idxen +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_max_i64 v[5:6], v0, null, s3 idxen +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_max_num_f32 v5, v0, null, s3 idxen +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_max_u32 v5, v0, null, s3 idxen +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_max_u64 v[5:6], v0, null, s3 idxen +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_min_i32 v5, v0, null, s3 idxen +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_min_i64 v[5:6], v0, null, s3 idxen +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_min_u32 v5, v0, null, s3 idxen +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_min_u64 v[5:6], v0, null, s3 idxen +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_min_num_f32 v5, v0, null, s3 idxen +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_or_b32 v5, v0, null, s3 idxen +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_or_b64 v[5:6], v0, null, s3 idxen +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_pk_add_bf16 v5, v0, null, s3 idxen +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_pk_add_f16 v5, v0, null, s3 idxen +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_sub_clamp_u32 v5, v0, null, s3 idxen +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_sub_u32 v5, v0, null, s3 idxen +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_sub_u64 v[5:6], v0, null, s3 idxen +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_swap_b32 v5, v0, null, s3 idxen +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_swap_b64 v[5:6], v0, null, s3 idxen +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_xor_b32 v5, v0, null, s3 idxen +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_atomic_xor_b64 v[5:6], v0, null, s3 idxen +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_b128 v[5:8], v0, null, s3 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_b32 v5, v0, null, s3 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_b64 v[1:2], v0, null, s4 idxen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_b96 v[1:3], v0, null, s4 idxen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_d16_b16 v5, v0, null, s3 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_d16_format_x v3, v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_d16_format_xy v3, v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_d16_format_xyz v[3:4], v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_d16_format_xyzw v[3:4], v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_d16_hi_b16 v3, v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_d16_hi_format_x v3, v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_d16_hi_i8 v3, v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_d16_hi_u8 v3, v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_d16_i8 v3, v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_d16_u8 v3, v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_format_x v3, v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_format_xy v[3:4], v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_format_xyz v[3:5], v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_format_xyzw v[3:6], v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_i16 v3, v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_i8 v3, v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_u16 v3, v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_load_u8 v3, v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_b128 v[3:6], v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_b16 v3, v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_b32 v3, v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_b64 v[3:4], v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_b8 v3, v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_b96 v[3:5], v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_d16_format_x v3, v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_d16_format_xy v3, v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_d16_format_xyz v[3:4], v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_d16_format_xyzw v[3:4], v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_d16_hi_b16 v3, v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_d16_hi_b8 v3, v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_d16_hi_format_x v3, v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_format_x v1, v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_format_xy v[1:2], v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_format_xyz v[1:3], v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +buffer_store_format_xyzw v[1:4], v0, null, s1 offen offset:4095 +// NOGFX12: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction diff --git a/llvm/test/MC/Disassembler/AMDGPU/gfx10_smem.txt b/llvm/test/MC/Disassembler/AMDGPU/gfx10_smem.txt index 890a64b22f399..95301677272c2 100644 --- a/llvm/test/MC/Disassembler/AMDGPU/gfx10_smem.txt +++ b/llvm/test/MC/Disassembler/AMDGPU/gfx10_smem.txt @@ -1261,3 +1261,18 @@ # GFX10: s_store_dwordx4 s[96:99], s[4:5], s0 ; encoding: [0x02,0x18,0x48,0xf4,0x00,0x00,0x00,0x00] 0x02,0x18,0x48,0xf4,0x00,0x00,0x00,0x00 + +# GFX10: s_load_dword null, s[2:3], s0 ; encoding: [0x41,0x1f,0x00,0xf4,0x00,0x00,0x00,0x00] +0x41,0x1f,0x00,0xf4,0x00,0x00,0x00,0x00 + +# GFX10: s_load_dwordx2 null, s[2:3], s0 ; encoding: [0x41,0x1f,0x04,0xf4,0x00,0x00,0x00,0x00] +0x41,0x1f,0x04,0xf4,0x00,0x00,0x00,0x00 + +# GFX10: s_load_dwordx4 null, s[2:3], s0 ; encoding: [0x41,0x1f,0x08,0xf4,0x00,0x00,0x00,0x00] +0x41,0x1f,0x08,0xf4,0x00,0x00,0x00,0x00 + +# GFX10: s_load_dwordx8 null, s[2:3], s0 ; encoding: [0x41,0x1f,0x0c,0xf4,0x00,0x00,0x00,0x00] +0x41,0x1f,0x0c,0xf4,0x00,0x00,0x00,0x00 + +# GFX10: s_load_dwordx16 null, s[2:3], s0 ; encoding: [0x41,0x1f,0x10,0xf4,0x00,0x00,0x00,0x00] +0x41,0x1f,0x10,0xf4,0x00,0x00,0x00,0x00 diff --git a/llvm/test/MC/Disassembler/AMDGPU/gfx11_dasm_smem.txt b/llvm/test/MC/Disassembler/AMDGPU/gfx11_dasm_smem.txt index 8b49de5d89909..8396132a5b29c 100644 --- a/llvm/test/MC/Disassembler/AMDGPU/gfx11_dasm_smem.txt +++ b/llvm/test/MC/Disassembler/AMDGPU/gfx11_dasm_smem.txt @@ -471,3 +471,18 @@ # GFX11: s_gl1_inv ; encoding: [0x00,0x00,0x80,0xf4,0x00,0x00,0x00,0x00] 0x00,0x00,0x80,0xf4,0x00,0x00,0x00,0x00 + +# GFX11: s_load_b32 null, s[2:3], s0 ; encoding: [0x01,0x1f,0x00,0xf4,0x00,0x00,0x00,0x00] +0x01,0x1f,0x00,0xf4,0x00,0x00,0x00,0x00 + +# GFX11: s_load_b64 null, s[2:3], s0 ; encoding: [0x01,0x1f,0x04,0xf4,0x00,0x00,0x00,0x00] +0x01,0x1f,0x04,0xf4,0x00,0x00,0x00,0x00 + +# GFX11: s_load_b128 null, s[2:3], s0 ; encoding: [0x01,0x1f,0x08,0xf4,0x00,0x00,0x00,0x00] +0x01,0x1f,0x08,0xf4,0x00,0x00,0x00,0x00 + +# GFX11: s_load_b256 null, s[2:3], s0 ; encoding: [0x01,0x1f,0x0c,0xf4,0x00,0x00,0x00,0x00] +0x01,0x1f,0x0c,0xf4,0x00,0x00,0x00,0x00 + +# GFX11: s_load_b512 null, s[2:3], s0 ; encoding: [0x01,0x1f,0x10,0xf4,0x00,0x00,0x00,0x00] +0x01,0x1f,0x10,0xf4,0x00,0x00,0x00,0x00 diff --git a/llvm/test/MC/Disassembler/AMDGPU/gfx12_dasm_smem.txt b/llvm/test/MC/Disassembler/AMDGPU/gfx12_dasm_smem.txt index 28decdd4c5b1e..02641e6eb97f0 100644 --- a/llvm/test/MC/Disassembler/AMDGPU/gfx12_dasm_smem.txt +++ b/llvm/test/MC/Disassembler/AMDGPU/gfx12_dasm_smem.txt @@ -1277,3 +1277,21 @@ # GFX12: s_buffer_load_u16 s5, s[96:99], s0 offset:0x0 th:TH_LOAD_HT scope:SCOPE_SYS ; encoding: [0x70,0x61,0x63,0xf5,0x00,0x00,0x00,0x00] 0x70,0x61,0x63,0xf5,0x00,0x00,0x00,0x00 + +# GFX12: s_load_b32 null, s[2:3], s0 offset:0x0 ; encoding: [0x01,0x1f,0x00,0xf4,0x00,0x00,0x00,0x00] +0x01,0x1f,0x00,0xf4,0x00,0x00,0x00,0x00 + +# GFX12: s_load_b64 null, s[2:3], s0 offset:0x0 ; encoding: [0x01,0x3f,0x00,0xf4,0x00,0x00,0x00,0x00] +0x01,0x3f,0x00,0xf4,0x00,0x00,0x00,0x00 + +# GFX12: s_load_b96 null, s[2:3], s0 offset:0x0 ; encoding: [0x01,0xbf,0x00,0xf4,0x00,0x00,0x00,0x00] +0x01,0xbf,0x00,0xf4,0x00,0x00,0x00,0x00 + +# GFX12: s_load_b128 null, s[2:3], s0 offset:0x0 ; encoding: [0x01,0x5f,0x00,0xf4,0x00,0x00,0x00,0x00] +0x01,0x5f,0x00,0xf4,0x00,0x00,0x00,0x00 + +# GFX12: s_load_b256 null, s[2:3], s0 offset:0x0 ; encoding: [0x01,0x7f,0x00,0xf4,0x00,0x00,0x00,0x00] +0x01,0x7f,0x00,0xf4,0x00,0x00,0x00,0x00 + +# GFX12: s_load_b512 null, s[2:3], s0 offset:0x0 ; encoding: [0x01,0x9f,0x00,0xf4,0x00,0x00,0x00,0x00] +0x01,0x9f,0x00,0xf4,0x00,0x00,0x00,0x00