diff --git a/llvm/lib/Target/AMDGPU/SIInstrInfo.td b/llvm/lib/Target/AMDGPU/SIInstrInfo.td index a6820544f4b4d..bb48f4bb5c69a 100644 --- a/llvm/lib/Target/AMDGPU/SIInstrInfo.td +++ b/llvm/lib/Target/AMDGPU/SIInstrInfo.td @@ -994,9 +994,9 @@ def SDWAVopcDst : BoolRC { let PrintMethod = "printVOPDst"; } -class NamedIntOperand - : CustomOperand { +class NamedIntOperand + : CustomOperand { let ParserMethod = "[this](OperandVector &Operands) -> ParseStatus { "# "return parseIntWithPrefix(\""#Prefix#"\", Operands, "# @@ -1039,9 +1039,9 @@ class ArrayOperand0 let ImmTy = "ImmTyOffset" in def flat_offset : CustomOperand; -def offset : NamedIntOperand; -def offset0 : NamedIntOperand; -def offset1 : NamedIntOperand; +def offset : NamedIntOperand; +def offset0 : NamedIntOperand; +def offset1 : NamedIntOperand; def gds : NamedBitOperand<"gds", "GDS">; @@ -1092,25 +1092,25 @@ def dpp8 : CustomOperand; def dpp_ctrl : CustomOperand; let DefaultValue = "0xf" in { -def row_mask : NamedIntOperand; -def bank_mask : NamedIntOperand; +def row_mask : NamedIntOperand; +def bank_mask : NamedIntOperand; } -def bound_ctrl : NamedIntOperand bool { return convertDppBoundCtrl(BC); }">; -def FI : NamedIntOperand; +def FI : NamedIntOperand; def blgp : CustomOperand; -def cbsz : NamedIntOperand; -def abid : NamedIntOperand; +def cbsz : NamedIntOperand; +def abid : NamedIntOperand; def hwreg : CustomOperand; def exp_tgt : CustomOperand; -def wait_vdst : NamedIntOperand; -def wait_exp : NamedIntOperand; -def wait_va_vdst : NamedIntOperand; -def wait_va_vsrc : NamedIntOperand; +def wait_vdst : NamedIntOperand; +def wait_exp : NamedIntOperand; +def wait_va_vdst : NamedIntOperand; +def wait_va_vsrc : NamedIntOperand; class KImmFPOperand : ImmOperand { let OperandNamespace = "AMDGPU"; diff --git a/llvm/lib/Target/AMDGPU/SMInstructions.td b/llvm/lib/Target/AMDGPU/SMInstructions.td index 9a27d22d585ec..f082de35b6ae9 100644 --- a/llvm/lib/Target/AMDGPU/SMInstructions.td +++ b/llvm/lib/Target/AMDGPU/SMInstructions.td @@ -10,8 +10,13 @@ def smrd_offset_8 : ImmOperand; let EncoderMethod = "getSMEMOffsetEncoding", DecoderMethod = "decodeSMEMOffset" in { -def smem_offset : ImmOperand; -def smem_offset_mod : NamedIntOperand; +def SMEMOffset : ImmOperand; +def SMEMOffsetMod : NamedIntOperand; +def OptSMEMOffsetMod : NamedIntOperand { + let ImmTy = SMEMOffsetMod.ImmTy; + let PredicateMethod = SMEMOffsetMod.PredicateMethod; + let PrintMethod = SMEMOffsetMod.PrintMethod; +} } //===----------------------------------------------------------------------===// @@ -87,11 +92,14 @@ class OffsetMode; +def IMM_Offset : OffsetMode<1, 0, "_IMM", (ins SMEMOffset:$offset), "$offset">; def SGPR_Offset : OffsetMode<0, 1, "_SGPR", (ins SReg_32:$soffset), "$soffset">; def SGPR_IMM_Offset : OffsetMode<1, 1, "_SGPR_IMM", - (ins SReg_32:$soffset, smem_offset_mod:$offset), + (ins SReg_32:$soffset, SMEMOffsetMod:$offset), "$soffset$offset">; +def SGPR_IMM_OptOffset : OffsetMode<1, 1, "_SGPR_IMM", + (ins SReg_32:$soffset, OptSMEMOffsetMod:$offset), + "$soffset$offset">; class SM_Probe_Pseudo : SM_Pseudo { def _IMM : SM_Probe_Pseudo ; def _SGPR : SM_Probe_Pseudo ; def _SGPR_IMM : SM_Probe_Pseudo ; + def _SGPR_OPT_IMM : SM_Probe_Pseudo ; } class SM_WaveId_Pseudo : SM_Pseudo< @@ -214,7 +223,7 @@ class SM_WaveId_Pseudo : SM_Pseudo< class SM_Prefetch_Pseudo : SM_Pseudo { // Mark prefetches as both load and store to prevent reordering with loads // and stores. This is also needed for pattern to match prefetch intrinsic. @@ -1410,7 +1419,7 @@ class SMEM_Real_Load_gfx12 op, string ps, string opName, OffsetMode offs multiclass SM_Real_Loads_gfx12 op, string ps = NAME> { defvar opName = !tolower(NAME); def _IMM_gfx12 : SMEM_Real_Load_gfx12; - def _SGPR_IMM_gfx12 : SMEM_Real_Load_gfx12; + def _SGPR_IMM_gfx12 : SMEM_Real_Load_gfx12; } defm S_LOAD_B32 : SM_Real_Loads_gfx12<0x00, "S_LOAD_DWORD">; @@ -1448,7 +1457,7 @@ def S_PREFETCH_DATA_PC_REL_gfx12 : SMEM_Real_Prefetch_gfx12<0x28, S_PREFETCH_DAT multiclass SMEM_Real_Probe_gfx12 op> { defvar ps = NAME; def _IMM_gfx12 : SMEM_Real_Prefetch_gfx12(ps#_IMM)>; - def _SGPR_IMM_gfx12 : SMEM_Real_Prefetch_gfx12(ps#_SGPR_IMM)>; + def _SGPR_IMM_gfx12 : SMEM_Real_Prefetch_gfx12(ps#_SGPR_OPT_IMM)>; } defm S_ATC_PROBE : SMEM_Real_Probe_gfx12<0x22>;