diff --git a/llvm/lib/Target/AMDGPU/AMDGPUInstructions.td b/llvm/lib/Target/AMDGPU/AMDGPUInstructions.td index f77b4c9d9642..9b6443a99ac5 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUInstructions.td +++ b/llvm/lib/Target/AMDGPU/AMDGPUInstructions.td @@ -122,12 +122,12 @@ class CustomOperandProps { string OperandType = "OPERAND_IMMEDIATE"; } -class CustomOperand +class CustomOperand : Operand, CustomOperandProps; class ImmOperand - : CustomOperand { + : CustomOperand { let ImmTy = "ImmTyNone"; let ParserMethod = ""; let PrintMethod = printer; @@ -140,7 +140,7 @@ def u16imm : ImmOperand; class ValuePredicatedOperand - : CustomOperand { + : CustomOperand { let ImmTy = op.ImmTy; defvar OpPredicate = op.ParserMatchClass.PredicateMethod; let PredicateMethod = diff --git a/llvm/lib/Target/AMDGPU/SIInstrInfo.td b/llvm/lib/Target/AMDGPU/SIInstrInfo.td index 2ec7edbb0dce..ef6d0f22a2f3 100644 --- a/llvm/lib/Target/AMDGPU/SIInstrInfo.td +++ b/llvm/lib/Target/AMDGPU/SIInstrInfo.td @@ -1057,7 +1057,7 @@ def extract_cpol_set_glc : SDNodeXForm { +def SOPPBrTarget : CustomOperand { let PrintMethod = "printOperand"; let EncoderMethod = "getSOPPBrEncoding"; let DecoderMethod = "decodeSOPPBrTarget"; @@ -1066,11 +1066,11 @@ def SOPPBrTarget : CustomOperand { def si_ga : Operand; -def InterpSlot : CustomOperand; +def InterpSlot : CustomOperand; // It appears to be necessary to create a separate operand for this to // be able to parse attr with no space. -def InterpAttr : CustomOperand; +def InterpAttr : CustomOperand; def InterpAttrChan : ImmOperand; @@ -1093,19 +1093,19 @@ def VReg32OrOffClass : AsmOperandClass { let ParserMethod = "parseVReg32OrOff"; } -def SendMsg : CustomOperand; +def SendMsg : CustomOperand; -def WaitEvent : CustomOperand; +def WaitEvent : CustomOperand; -def Swizzle : CustomOperand; +def Swizzle : CustomOperand<1, type=i16>; -def Endpgm : CustomOperand; +def Endpgm : CustomOperand<1, type=i16>; -def SWaitCnt : CustomOperand; +def SWaitCnt : CustomOperand; -def DepCtr : CustomOperand; +def DepCtr : CustomOperand; -def SDelayALU : CustomOperand; +def SDelayALU : CustomOperand; include "SIInstrFormats.td" include "VIInstrFormats.td" @@ -1187,7 +1187,7 @@ def SDWAVopcDst : BoolRC { } class NamedIntOperand - : CustomOperand { + : CustomOperand { string Prefix = prefix; let PredicateMethod = @@ -1211,7 +1211,7 @@ class NamedIntOperand } class NamedBitOperand - : CustomOperand { + : CustomOperand<1, Name, i1> { let PredicateMethod = "isImmTy"; let ParserMethod = "[this](OperandVector &Operands) -> ParseStatus { "# @@ -1229,7 +1229,7 @@ class DefaultOperand } class SDWAOperand - : CustomOperand { + : CustomOperand<1, Name> { let ParserMethod = "[this](OperandVector &Operands) -> ParseStatus { "# "return parseSDWASel(Operands, \""#Id#"\", AMDGPUOperand::"#ImmTy#"); }"; @@ -1245,7 +1245,7 @@ class ArrayOperand0 } let ImmTy = "ImmTyOffset" in -def flat_offset : CustomOperand; +def flat_offset : CustomOperand<1, "FlatOffset">; let PrintMethod = "printOffset" in def Offset : NamedIntOperand<"offset">; let Validator = "isUInt<8>" in { @@ -1255,7 +1255,7 @@ def Offset1 : NamedIntOperand<"offset1">; def gds : NamedBitOperand<"gds", "GDS">; -def omod : CustomOperand; +def omod : CustomOperand<1, "OModSI">; def omod0 : DefaultOperand; // We need to make the cases with a default of 0 distinct from no @@ -1265,7 +1265,7 @@ def Clamp : NamedBitOperand<"clamp">; def Clamp0 : DefaultOperand; def highmod : NamedBitOperand<"high", "High">; -def CPol : CustomOperand; +def CPol : CustomOperand<1>; def CPol_0 : DefaultOperand; def CPol_GLC1 : DefaultOperand; def CPol_GLC : ValuePredicatedOperand; @@ -1278,7 +1278,7 @@ def IsAsync : NamedBitOperand<"isasync">; def TFE : NamedBitOperand<"tfe">; def UNorm : NamedBitOperand<"unorm">; def DA : NamedBitOperand<"da">; -def R128A16 : CustomOperand; +def R128A16 : CustomOperand<1, type=i1>; def A16 : NamedBitOperand<"a16">; def D16 : NamedBitOperand<"d16">; def LWE : NamedBitOperand<"lwe">; @@ -1287,29 +1287,29 @@ def exp_vm : NamedBitOperand<"vm", "ExpVM", 1>; def exp_done : NamedBitOperand<"done", "Done", 1>; def exp_row_en : NamedBitOperand<"row_en", "RowEn", 1>; -def FORMAT : CustomOperand; +def FORMAT : CustomOperand; let PrintInHex = 1 in def DMask : NamedIntOperand<"dmask">; -def Dim : CustomOperand; +def Dim : CustomOperand; def dst_sel : SDWAOperand<"dst_sel", "SDWADstSel">; def src0_sel : SDWAOperand<"src0_sel", "SDWASrc0Sel">; def src1_sel : SDWAOperand<"src1_sel", "SDWASrc1Sel">; -def dst_unused : CustomOperand; +def dst_unused : CustomOperand<1, "SDWADstUnused">; def op_sel0 : ArrayOperand0<"op_sel", "OpSel">; def op_sel_hi0 : ArrayOperand0<"op_sel_hi", "OpSelHi">; def neg_lo0 : ArrayOperand0<"neg_lo", "NegLo">; def neg_hi0 : ArrayOperand0<"neg_hi", "NegHi">; -def IndexKey32bit : CustomOperand; -def IndexKey16bit : CustomOperand; -def IndexKey8bit : CustomOperand; +def IndexKey32bit : CustomOperand<1>; +def IndexKey16bit : CustomOperand<1>; +def IndexKey8bit : CustomOperand<1>; -def dpp8 : CustomOperand; -def dpp_ctrl : CustomOperand; +def dpp8 : CustomOperand<0, "DPP8">; +def dpp_ctrl : CustomOperand<0, "DPPCtrl">; let DefaultValue = "0xf", PrintInHex = 1, AlwaysPrint = 1 in { def DppRowMask : NamedIntOperand<"row_mask">; @@ -1325,16 +1325,16 @@ def Dpp8FI : NamedIntOperand<"fi", 1, "DppFI">; let PrintMethod = "printDppFI" in def Dpp16FI : NamedIntOperand<"fi", 1, "DppFI">; -def blgp : CustomOperand; +def blgp : CustomOperand<1, "BLGP">; def CBSZ : NamedIntOperand<"cbsz"> { let Validator = "isUInt<3>"; } def ABID : NamedIntOperand<"abid"> { let Validator = "isUInt<4>"; } -def hwreg : CustomOperand; +def hwreg : CustomOperand<0, "Hwreg">; -def exp_tgt : CustomOperand; +def exp_tgt : CustomOperand<0, "ExpTgt">; let AlwaysPrint = 1 in { def WaitVDST : NamedIntOperand<"wait_vdst"> { @@ -1360,14 +1360,14 @@ let PrintMethod = "printBitOp3" in def BitOp3 : NamedIntOperand<"bitop3">; def bitop3_0 : DefaultOperand; -def MatrixAFMT : CustomOperand; -def MatrixBFMT : CustomOperand; +def MatrixAFMT : CustomOperand<1, "MatrixAFMT">; +def MatrixBFMT : CustomOperand<1, "MatrixBFMT">; -def MatrixAScale : CustomOperand; -def MatrixBScale : CustomOperand; +def MatrixAScale : CustomOperand<1, "MatrixAScale">; +def MatrixBScale : CustomOperand<1, "MatrixBScale">; -def MatrixAScaleFmt : CustomOperand; -def MatrixBScaleFmt : CustomOperand; +def MatrixAScaleFmt : CustomOperand<1, "MatrixAScaleFmt">; +def MatrixBScaleFmt : CustomOperand<1, "MatrixBScaleFmt">; def MatrixAReuse : NamedBitOperand<"matrix_a_reuse">; def MatrixBReuse : NamedBitOperand<"matrix_b_reuse">; diff --git a/llvm/lib/Target/AMDGPU/SOPInstructions.td b/llvm/lib/Target/AMDGPU/SOPInstructions.td index b5f484645728..4483853fd023 100644 --- a/llvm/lib/Target/AMDGPU/SOPInstructions.td +++ b/llvm/lib/Target/AMDGPU/SOPInstructions.td @@ -6,7 +6,7 @@ // //===----------------------------------------------------------------------===// -def GPRIdxMode : CustomOperand; +def GPRIdxMode : CustomOperand; class SOP_Pseudo pattern=[]> :