diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoV.td b/llvm/lib/Target/RISCV/RISCVInstrInfoV.td --- a/llvm/lib/Target/RISCV/RISCVInstrInfoV.td +++ b/llvm/lib/Target/RISCV/RISCVInstrInfoV.td @@ -98,88 +98,190 @@ // Scheduling definitions. //===----------------------------------------------------------------------===// -class VMVRSched : Sched<[ - !cast("WriteVMov" #n #"V"), - !cast("ReadVMov" #n #"V") -]>; - -class VLESched : Sched<[ - !cast("WriteVLDE_" #lmul), - ReadVLDX, ReadVMask -]>; - -class VSESched : Sched<[ - !cast("WriteVSTE_" #lmul), - !cast("ReadVSTEV_" #lmul), - ReadVSTX, ReadVMask -]>; - -class VLSSched : Sched<[ - !cast("WriteVLDS" #eew #"_" #emul), - ReadVLDX, ReadVLDSX, ReadVMask -]>; - -class VSSSched : Sched<[ - !cast("WriteVSTS" #eew #"_" #emul), - !cast("ReadVSTS" #eew #"V_" #emul), - ReadVSTX, ReadVSTSX, ReadVMask -]>; - -class VLXSched : Sched<[ - !cast("WriteVLD" #isOrdered #"X" #dataEEW #"_" #dataEMUL), - ReadVLDX, - !cast("ReadVLD" #isOrdered #"XV_" #idxEMUL), ReadVMask -]>; - -class VSXSched : Sched<[ - !cast("WriteVST" #isOrdered #"X" #dataEEW #"_" #dataEMUL), - !cast("ReadVST" #isOrdered #"X" #dataEEW #"_" #dataEMUL), - ReadVSTX, !cast("ReadVST" #isOrdered #"XV_" #idxEMUL), ReadVMask -]>; - -class VLFSched : Sched<[ - !cast("WriteVLDFF_" #lmul), - ReadVLDX, ReadVMask -]>; +// Common class of scheduling definitions. +// `ReadVMask` will be appended if instruction is masked. +// Operands: +// `writes` SchedWrites that are listed for each explicit def operand +// in order. +// `reads` SchedReads that are listed for each explicit use operand. +// `forceMasked` Forced to be masked (e.g. Add-with-Carry Instructions). +class SchedCommon writes, list reads, + bit forceMasked = 0>: Sched<[]> { + defvar isMasked = !ne(!find(NAME, "_MASK"), -1); + defvar needReadVMask = !or(forceMasked, isMasked); + let SchedRW = !listconcat(writes, reads, + !if(needReadVMask, [ReadVMask], [])); +} + +// Common class of scheduling definitions for n-ary instructions. +// The scheudling resources are relevant to LMUL and may be relevant to SEW. +class SchedNary reads, + string mx, int sew = 0, bit forceMasked = 0>: + SchedCommon<[!cast( + !if(sew, write # "_" # mx # "_E" # sew, + write # "_" # mx))], + !foreach(read, reads, + !cast( + !if(sew, read # "_" # mx # "_E" # sew, + read # "_" # mx))), + forceMasked>; + +// Classes with postfix "MC" are only used in MC layer. +// For these classes, we assume that they are with the worst case costs and +// `ReadVMask` is always needed (with some exceptions). + +// For instructions with no operand. +class SchedNullary: + SchedNary; +class SchedNullaryMC: + SchedNullary; + +// For instructions with one operand. +class SchedUnary: + SchedNary; +class SchedUnaryMC: + SchedUnary; + +// For instructions with two operands. +class SchedBinary: + SchedNary; +class SchedBinaryMC: + SchedBinary; + +// For instructions with three operands. +class SchedTernary: + SchedNary; + +// For reduction instructions. +class SchedReduction: + SchedCommon<[!cast(write # "_" # mx # "_E" # sew)], + !listsplat(!cast(read), 3)>; +class SchedReductionMC: + SchedCommon<[!cast(write # "_WorstCase")], + [!cast(readV), !cast(readV0)], + forceMasked=1>; + +// Whole Vector Register Move +class VMVRSched : SchedCommon< + [!cast("WriteVMov" #n #"V")], + [!cast("ReadVMov" #n #"V")] +>; + +// Vector Unit-Stride Loads and Stores +class VLESched : SchedCommon< + [!cast("WriteVLDE_" #lmul)], + [ReadVLDX], forceMasked +>; +class VLESchedMC : VLESched<"WorstCase", forceMasked=1>; + +class VSESched : SchedCommon< + [!cast("WriteVSTE_" #lmul)], + [!cast("ReadVSTEV_" #lmul), ReadVSTX], forceMasked +>; +class VSESchedMC : VSESched<"WorstCase", forceMasked=1>; + +// Vector Strided Loads and Stores +class VLSSched : SchedCommon< + [!cast("WriteVLDS" #eew #"_" #emul)], + [ReadVLDX, ReadVLDSX], forceMasked +>; +class VLSSchedMC : VLSSched; + +class VSSSched : SchedCommon< + [!cast("WriteVSTS" #eew #"_" #emul)], + [!cast("ReadVSTS" #eew #"V_" #emul), ReadVSTX, ReadVSTSX], + forceMasked +>; +class VSSSchedMC : VSSSched; + +// Vector Indexed Loads and Stores +class VLXSched : SchedCommon< + [!cast("WriteVLD" #isOrdered #"X" #dataEEW #"_" #dataEMUL)], + [ReadVLDX, !cast("ReadVLD" #isOrdered #"XV_" #idxEMUL)], + forceMasked +>; +class VLXSchedMC: + VLXSched; + +class VSXSched : SchedCommon< + [!cast("WriteVST" #isOrdered #"X" #dataEEW #"_" #dataEMUL)], + [!cast("ReadVST" #isOrdered #"X" #dataEEW #"_" #dataEMUL), + ReadVSTX, !cast("ReadVST" #isOrdered #"XV_" #idxEMUL)], + forceMasked +>; +class VSXSchedMC: + VSXSched; + +// Unit-stride Fault-Only-First Loads +class VLFSched : SchedCommon< + [!cast("WriteVLDFF_" #lmul)], + [ReadVLDX], forceMasked +>; +class VLFSchedMC: VLFSched<"WorstCase", forceMasked=1>; // Unit-Stride Segment Loads and Stores -class VLSEGSched : Sched<[ - !cast("WriteVLSEG" #nf #"e" #eew #"_" #emul), - ReadVLDX, ReadVMask -]>; -class VSSEGSched : Sched<[ - !cast("WriteVSSEG" #nf #"e" #eew #"_" #emul), - !cast("ReadVSTEV_" #emul), - ReadVSTX, ReadVMask -]>; -class VLSEGFFSched : Sched<[ - !cast("WriteVLSEGFF" #nf #"e" #eew #"_" #emul), - ReadVLDX, ReadVMask -]>; +class VLSEGSched : SchedCommon< + [!cast("WriteVLSEG" #nf #"e" #eew #"_" #emul)], + [ReadVLDX], forceMasked +>; +class VLSEGSchedMC : VLSEGSched; + +class VSSEGSched : SchedCommon< + [!cast("WriteVSSEG" #nf #"e" #eew #"_" #emul)], + [!cast("ReadVSTEV_" #emul), ReadVSTX], forceMasked +>; +class VSSEGSchedMC : VSSEGSched; + +class VLSEGFFSched : SchedCommon< + [!cast("WriteVLSEGFF" #nf #"e" #eew #"_" #emul)], + [ReadVLDX], forceMasked +>; +class VLSEGFFSchedMC : VLSEGFFSched; + // Strided Segment Loads and Stores -class VLSSEGSched : Sched<[ - !cast("WriteVLSSEG" #nf #"e" #eew #"_" #emul), - ReadVLDX, ReadVLDSX, ReadVMask -]>; -class VSSSEGSched : Sched<[ - !cast("WriteVSSSEG" #nf #"e" #eew #"_" #emul), - !cast("ReadVSTS" #eew #"V_" #emul), - ReadVSTX, ReadVSTSX, ReadVMask -]>; +class VLSSEGSched : SchedCommon< + [!cast("WriteVLSSEG" #nf #"e" #eew #"_" #emul)], + [ReadVLDX, ReadVLDSX], forceMasked +>; +class VLSSEGSchedMC : VLSSEGSched; + +class VSSSEGSched : SchedCommon< + [!cast("WriteVSSSEG" #nf #"e" #eew #"_" #emul)], + [!cast("ReadVSTS" #eew #"V_" #emul), + ReadVSTX, ReadVSTSX], forceMasked +>; +class VSSSEGSchedMC : VSSSEGSched; + // Indexed Segment Loads and Stores -class VLXSEGSched : Sched<[ - !cast("WriteVL" #isOrdered #"XSEG" #nf #"e" #eew #"_" #emul), - ReadVLDX, !cast("ReadVLD" #isOrdered #"XV_" #emul), ReadVMask -]>; -class VSXSEGSched : Sched<[ - !cast("WriteVS" #isOrdered #"XSEG" #nf #"e" #eew #"_" #emul), - !cast("ReadVST" #isOrdered #"X" #eew #"_" #emul), - ReadVSTX, !cast("ReadVST" #isOrdered #"XV_" #emul), ReadVMask -]>; +class VLXSEGSched : SchedCommon< + [!cast("WriteVL" #isOrdered #"XSEG" #nf #"e" #eew #"_" #emul)], + [ReadVLDX, !cast("ReadVLD" #isOrdered #"XV_" #emul)], + forceMasked +>; +class VLXSEGSchedMC: + VLXSEGSched; + +class VSXSEGSched : SchedCommon< + [!cast("WriteVS" #isOrdered #"XSEG" #nf #"e" #eew #"_" #emul)], + [!cast("ReadVST" #isOrdered #"X" #eew #"_" #emul), + ReadVSTX, !cast("ReadVST" #isOrdered #"XV_" #emul)], + forceMasked +>; +class VSXSEGSchedMC: + VSXSEGSched; //===----------------------------------------------------------------------===// // Instruction class templates @@ -428,36 +530,33 @@ def VLUXEI # n # _V : VIndexedLoad, - VLXSched; + VLXSchedMC; def VLOXEI # n # _V : VIndexedLoad, - VLXSched; + VLXSchedMC; def VSUXEI # n # _V : VIndexedStore, - VSXSched; + VSXSchedMC; def VSOXEI # n # _V : VIndexedStore, - VSXSched; + VSXSchedMC; } } multiclass VALU_IV_V funct6> { def V : VALUVV, - Sched<[WriteVIALUV_WorstCase, ReadVIALUV_WorstCase, - ReadVIALUV_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVIALUV", "ReadVIALUV", "ReadVIALUV">; } multiclass VALU_IV_X funct6> { def X : VALUVX, - Sched<[WriteVIALUX_WorstCase, ReadVIALUV_WorstCase, - ReadVIALUX_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVIALUX", "ReadVIALUV", "ReadVIALUX">; } multiclass VALU_IV_I funct6> { def I : VALUVI, - Sched<[WriteVIALUI_WorstCase, ReadVIALUV_WorstCase, - ReadVMask]>; + SchedUnaryMC<"WriteVIALUI", "ReadVIALUV">; } multiclass VALU_IV_V_X_I funct6> @@ -475,364 +574,302 @@ multiclass VALU_MV_V_X funct6, string vw> { def V : VALUVV, - Sched<[WriteVIWALUV_WorstCase, ReadVIWALUV_WorstCase, - ReadVIWALUV_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVIWALUV", "ReadVIWALUV", "ReadVIWALUV">; def X : VALUVX, - Sched<[WriteVIWALUX_WorstCase, ReadVIWALUV_WorstCase, - ReadVIWALUX_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVIWALUX", "ReadVIWALUV", "ReadVIWALUX">; } multiclass VMAC_MV_V_X funct6> { def V : VALUrVV, - Sched<[WriteVIMulAddV_WorstCase, ReadVIMulAddV_WorstCase, - ReadVIMulAddV_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVIMulAddV", "ReadVIMulAddV", "ReadVIMulAddV">; def X : VALUrVX, - Sched<[WriteVIMulAddX_WorstCase, ReadVIMulAddV_WorstCase, - ReadVIMulAddX_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVIMulAddX", "ReadVIMulAddV", "ReadVIMulAddX">; } multiclass VWMAC_MV_X funct6> { def X : VALUrVX, - Sched<[WriteVIWMulAddX_WorstCase, ReadVIWMulAddV_WorstCase, - ReadVIWMulAddX_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVIWMulAddX", "ReadVIWMulAddV", "ReadVIWMulAddX">; } multiclass VWMAC_MV_V_X funct6> : VWMAC_MV_X { def V : VALUrVV, - Sched<[WriteVIWMulAddV_WorstCase, ReadVIWMulAddV_WorstCase, - ReadVIWMulAddV_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVIWMulAddV", "ReadVIWMulAddV", "ReadVIWMulAddV">; } multiclass VALU_MV_VS2 funct6, bits<5> vs1> { def "" : VALUVs2, - Sched<[WriteVExtV_WorstCase, ReadVExtV_WorstCase, ReadVMask]>; + SchedUnaryMC<"WriteVExtV", "ReadVExtV">; } multiclass VMRG_IV_V_X_I funct6> { def VM : VALUmVV, - Sched<[WriteVIMergeV_WorstCase, ReadVIMergeV_WorstCase, - ReadVIMergeV_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVIMergeV", "ReadVIMergeV", "ReadVIMergeV">; def XM : VALUmVX, - Sched<[WriteVIMergeX_WorstCase, ReadVIMergeV_WorstCase, - ReadVIMergeX_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVIMergeX", "ReadVIMergeV", "ReadVIMergeX">; def IM : VALUmVI, - Sched<[WriteVIMergeI_WorstCase, ReadVIMergeV_WorstCase, - ReadVMask]>; + SchedUnaryMC<"WriteVIMergeI", "ReadVIMergeV">; } multiclass VALUm_IV_V_X funct6> { def VM : VALUmVV, - Sched<[WriteVICALUV_WorstCase, ReadVICALUV_WorstCase, - ReadVICALUV_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVICALUV", "ReadVICALUV", "ReadVICALUV">; def XM : VALUmVX, - Sched<[WriteVICALUX_WorstCase, ReadVICALUV_WorstCase, - ReadVICALUX_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVICALUX", "ReadVICALUV", "ReadVICALUX">; } multiclass VALUm_IV_V_X_I funct6> : VALUm_IV_V_X { def IM : VALUmVI, - Sched<[WriteVICALUI_WorstCase, ReadVICALUV_WorstCase, - ReadVMask]>; + SchedUnaryMC<"WriteVICALUI", "ReadVICALUV">; } multiclass VALUNoVm_IV_V_X funct6> { def V : VALUVVNoVm, - Sched<[WriteVICALUV_WorstCase, ReadVICALUV_WorstCase, - ReadVICALUV_WorstCase]>; + SchedBinaryMC<"WriteVICALUV", "ReadVICALUV", "ReadVICALUV", + forceMasked=0>; def X : VALUVXNoVm, - Sched<[WriteVICALUX_WorstCase, ReadVICALUV_WorstCase, - ReadVICALUX_WorstCase]>; + SchedBinaryMC<"WriteVICALUX", "ReadVICALUV", "ReadVICALUX", + forceMasked=0>; } multiclass VALUNoVm_IV_V_X_I funct6> : VALUNoVm_IV_V_X { def I : VALUVINoVm, - Sched<[WriteVICALUI_WorstCase, ReadVICALUV_WorstCase]>; + SchedUnaryMC<"WriteVICALUI", "ReadVICALUV", forceMasked=0>; } multiclass VALU_FV_F funct6> { def F : VALUVF, - Sched<[WriteVFALUF_WorstCase, ReadVFALUV_WorstCase, - ReadVFALUF_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVFALUF", "ReadVFALUV", "ReadVFALUF">; } multiclass VALU_FV_V_F funct6> : VALU_FV_F { def V : VALUVV, - Sched<[WriteVFALUV_WorstCase, ReadVFALUV_WorstCase, - ReadVFALUV_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVFALUV", "ReadVFALUV", "ReadVFALUV">; } multiclass VWALU_FV_V_F funct6, string vw> { def V : VALUVV, - Sched<[WriteVFWALUV_WorstCase, ReadVFWALUV_WorstCase, - ReadVFWALUV_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVFWALUV", "ReadVFWALUV", "ReadVFWALUV">; def F : VALUVF, - Sched<[WriteVFWALUF_WorstCase, ReadVFWALUV_WorstCase, - ReadVFWALUF_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVFWALUF", "ReadVFWALUV", "ReadVFWALUF">; } multiclass VMUL_FV_V_F funct6> { def V : VALUVV, - Sched<[WriteVFMulV_WorstCase, ReadVFMulV_WorstCase, - ReadVFMulV_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVFMulV", "ReadVFMulV", "ReadVFMulV">; def F : VALUVF, - Sched<[WriteVFMulF_WorstCase, ReadVFMulV_WorstCase, - ReadVFMulF_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVFMulF", "ReadVFMulV", "ReadVFMulF">; } multiclass VDIV_FV_F funct6> { def F : VALUVF, - Sched<[WriteVFDivF_WorstCase, ReadVFDivV_WorstCase, - ReadVFDivF_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVFDivF", "ReadVFDivV", "ReadVFDivF">; } multiclass VDIV_FV_V_F funct6> : VDIV_FV_F { def V : VALUVV, - Sched<[WriteVFDivV_WorstCase, ReadVFDivV_WorstCase, - ReadVFDivV_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVFDivV", "ReadVFDivV", "ReadVFDivV">; } multiclass VWMUL_FV_V_F funct6> { def V : VALUVV, - Sched<[WriteVFWMulV_WorstCase, ReadVFWMulV_WorstCase, - ReadVFWMulV_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVFWMulV", "ReadVFWMulV", "ReadVFWMulV">; def F : VALUVF, - Sched<[WriteVFWMulF_WorstCase, ReadVFWMulV_WorstCase, - ReadVFWMulF_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVFWMulF", "ReadVFWMulV", "ReadVFWMulF">; } multiclass VMAC_FV_V_F funct6> { def V : VALUrVV, - Sched<[WriteVFMulAddV_WorstCase, ReadVFMulAddV_WorstCase, - ReadVFMulAddV_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVFMulAddV", "ReadVFMulAddV", "ReadVFMulAddV">; def F : VALUrVF, - Sched<[WriteVFMulAddF_WorstCase, ReadVFMulAddV_WorstCase, - ReadVFMulAddF_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVFMulAddF", "ReadVFMulAddV", "ReadVFMulAddF">; } multiclass VWMAC_FV_V_F funct6> { def V : VALUrVV, - Sched<[WriteVFWMulAddV_WorstCase, ReadVFWMulAddV_WorstCase, - ReadVFWMulAddV_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVFWMulAddV", "ReadVFWMulAddV", "ReadVFWMulAddV">; def F : VALUrVF, - Sched<[WriteVFWMulAddF_WorstCase, ReadVFWMulAddV_WorstCase, - ReadVFWMulAddF_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVFWMulAddF", "ReadVFWMulAddV", "ReadVFWMulAddF">; } multiclass VSQR_FV_VS2 funct6, bits<5> vs1> { def "" : VALUVs2, - Sched<[WriteVFSqrtV_WorstCase, ReadVFSqrtV_WorstCase, - ReadVMask]>; + SchedUnaryMC<"WriteVFSqrtV", "ReadVFSqrtV">; } multiclass VRCP_FV_VS2 funct6, bits<5> vs1> { def "" : VALUVs2, - Sched<[WriteVFRecpV_WorstCase, ReadVFRecpV_WorstCase, - ReadVMask]>; + SchedUnaryMC<"WriteVFRecpV", "ReadVFRecpV">; } multiclass VMINMAX_FV_V_F funct6> { def V : VALUVV, - Sched<[WriteVFMinMaxV_WorstCase, ReadVFMinMaxV_WorstCase, - ReadVFMinMaxV_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVFMinMaxV", "ReadVFMinMaxV", "ReadVFMinMaxV">; def F : VALUVF, - Sched<[WriteVFMinMaxF_WorstCase, ReadVFMinMaxV_WorstCase, - ReadVFMinMaxF_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVFMinMaxF", "ReadVFMinMaxV", "ReadVFMinMaxF">; } multiclass VCMP_FV_F funct6> { def F : VALUVF, - Sched<[WriteVFCmpF_WorstCase, ReadVFCmpV_WorstCase, - ReadVFCmpF_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVFCmpF", "ReadVFCmpV", "ReadVFCmpF">; } multiclass VCMP_FV_V_F funct6> : VCMP_FV_F { def V : VALUVV, - Sched<[WriteVFCmpV_WorstCase, ReadVFCmpV_WorstCase, - ReadVFCmpV_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVFCmpV", "ReadVFCmpV", "ReadVFCmpV">; } multiclass VSGNJ_FV_V_F funct6> { def V : VALUVV, - Sched<[WriteVFSgnjV_WorstCase, ReadVFSgnjV_WorstCase, - ReadVFSgnjV_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVFSgnjV", "ReadVFSgnjV", "ReadVFSgnjV">; def F : VALUVF, - Sched<[WriteVFSgnjF_WorstCase, ReadVFSgnjV_WorstCase, - ReadVFSgnjF_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVFSgnjF", "ReadVFSgnjV", "ReadVFSgnjF">; } multiclass VCLS_FV_VS2 funct6, bits<5> vs1> { def "" : VALUVs2, - Sched<[WriteVFClassV_WorstCase, ReadVFClassV_WorstCase, - ReadVMask]>; + SchedUnaryMC<"WriteVFClassV", "ReadVFClassV">; } multiclass VCVTF_IV_VS2 funct6, bits<5> vs1> { def "" : VALUVs2, - Sched<[WriteVFCvtIToFV_WorstCase, ReadVFCvtIToFV_WorstCase, - ReadVMask]>; + SchedUnaryMC<"WriteVFCvtIToFV", "ReadVFCvtIToFV">; } multiclass VCVTI_FV_VS2 funct6, bits<5> vs1> { def "" : VALUVs2, - Sched<[WriteVFCvtFToIV_WorstCase, ReadVFCvtFToIV_WorstCase, - ReadVMask]>; + SchedUnaryMC<"WriteVFCvtFToIV", "ReadVFCvtFToIV">; } multiclass VWCVTF_IV_VS2 funct6, bits<5> vs1> { def "" : VALUVs2, - Sched<[WriteVFWCvtIToFV_WorstCase, ReadVFWCvtIToFV_WorstCase, - ReadVMask]>; + SchedUnaryMC<"WriteVFWCvtIToFV", "ReadVFWCvtIToFV">; } multiclass VWCVTI_FV_VS2 funct6, bits<5> vs1> { def "" : VALUVs2, - Sched<[WriteVFWCvtFToIV_WorstCase, ReadVFWCvtFToIV_WorstCase, - ReadVMask]>; + SchedUnaryMC<"WriteVFWCvtFToIV", "ReadVFWCvtFToIV">; } multiclass VWCVTF_FV_VS2 funct6, bits<5> vs1> { def "" : VALUVs2, - Sched<[WriteVFWCvtFToFV_WorstCase, ReadVFWCvtFToFV_WorstCase, - ReadVMask]>; + SchedUnaryMC<"WriteVFWCvtFToFV", "ReadVFWCvtFToFV">; } multiclass VNCVTF_IV_VS2 funct6, bits<5> vs1> { def "" : VALUVs2, - Sched<[WriteVFNCvtIToFV_WorstCase, ReadVFNCvtIToFV_WorstCase, - ReadVMask]>; + SchedUnaryMC<"WriteVFNCvtIToFV", "ReadVFNCvtIToFV">; } multiclass VNCVTI_FV_VS2 funct6, bits<5> vs1> { def "" : VALUVs2, - Sched<[WriteVFNCvtFToIV_WorstCase, ReadVFNCvtFToIV_WorstCase, - ReadVMask]>; + SchedUnaryMC<"WriteVFNCvtFToIV", "ReadVFNCvtFToIV">; } multiclass VNCVTF_FV_VS2 funct6, bits<5> vs1> { def "" : VALUVs2, - Sched<[WriteVFNCvtFToFV_WorstCase, ReadVFNCvtFToFV_WorstCase, - ReadVMask]>; + SchedUnaryMC<"WriteVFNCvtFToFV", "ReadVFNCvtFToFV">; } multiclass VRED_MV_V funct6> { def _VS : VALUVV, - Sched<[WriteVIRedV_From_WorstCase, ReadVIRedV, ReadVIRedV0, - ReadVMask]>; + SchedReductionMC<"WriteVIRedV_From", "ReadVIRedV", "ReadVIRedV0">; } multiclass VREDMINMAX_MV_V funct6> { def _VS : VALUVV, - Sched<[WriteVIRedMinMaxV_From_WorstCase, ReadVIRedV, ReadVIRedV0, - ReadVMask]>; + SchedReductionMC<"WriteVIRedMinMaxV_From", "ReadVIRedV", "ReadVIRedV0">; } multiclass VWRED_IV_V funct6> { def _VS : VALUVV, - Sched<[WriteVIWRedV_From_WorstCase, ReadVIWRedV, ReadVIWRedV0, - ReadVMask]>; + SchedReductionMC<"WriteVIWRedV_From", "ReadVIWRedV", "ReadVIWRedV0">; } multiclass VRED_FV_V funct6> { def _VS : VALUVV, - Sched<[WriteVFRedV_From_WorstCase, ReadVFRedV, ReadVFRedV0, - ReadVMask]>; + SchedReductionMC<"WriteVFRedV_From", "ReadVFRedV", "ReadVFRedV0">; } multiclass VREDMINMAX_FV_V funct6> { def _VS : VALUVV, - Sched<[WriteVFRedMinMaxV_From_WorstCase, ReadVFRedV, ReadVFRedV0, - ReadVMask]>; + SchedReductionMC<"WriteVFRedMinMaxV_From", "ReadVFRedV", "ReadVFRedV0">; } multiclass VREDO_FV_V funct6> { def _VS : VALUVV, - Sched<[WriteVFRedOV_From_WorstCase, ReadVFRedOV, ReadVFRedOV0, - ReadVMask]>; + SchedReductionMC<"WriteVFRedOV_From", "ReadVFRedOV", "ReadVFRedOV0">; } multiclass VWRED_FV_V funct6> { def _VS : VALUVV, - Sched<[WriteVFWRedV_From_WorstCase, ReadVFWRedV, ReadVFWRedV0, - ReadVMask]>; + SchedReductionMC<"WriteVFWRedV_From", "ReadVFWRedV", "ReadVFWRedV0">; } multiclass VWREDO_FV_V funct6> { def _VS : VALUVV, - Sched<[WriteVFWRedOV_From_WorstCase, ReadVFWRedOV, ReadVFWRedOV0, - ReadVMask]>; + SchedReductionMC<"WriteVFWRedOV_From", "ReadVFWRedOV", "ReadVFWRedOV0">; } multiclass VMALU_MV_Mask funct6, string vm = "v"> { def M : VALUVVNoVm, - Sched<[WriteVMALUV_WorstCase, ReadVMALUV_WorstCase, - ReadVMALUV_WorstCase]>; + SchedBinaryMC<"WriteVMALUV", "ReadVMALUV", "ReadVMALUV", + forceMasked=0>; } multiclass VMSFS_MV_V funct6, bits<5> vs1> { def "" : VALUVs2, - Sched<[WriteVMSFSV_WorstCase, ReadVMSFSV_WorstCase, ReadVMask]>; + SchedUnaryMC<"WriteVMSFSV", "ReadVMSFSV">; } multiclass VMIOT_MV_V funct6, bits<5> vs1> { def "" : VALUVs2, - Sched<[WriteVMIotV_WorstCase, ReadVMIotV_WorstCase, ReadVMask]>; + SchedUnaryMC<"WriteVMIotV", "ReadVMIotV">; } multiclass VSHT_IV_V_X_I funct6> { def V : VALUVV, - Sched<[WriteVShiftV_WorstCase, ReadVShiftV_WorstCase, - ReadVShiftV_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVShiftV", "ReadVShiftV", "ReadVShiftV">; def X : VALUVX, - Sched<[WriteVShiftX_WorstCase, ReadVShiftV_WorstCase, - ReadVShiftX_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVShiftX", "ReadVShiftV", "ReadVShiftX">; def I : VALUVI, - Sched<[WriteVShiftI_WorstCase, ReadVShiftV_WorstCase, - ReadVMask]>; + SchedUnaryMC<"WriteVShiftI", "ReadVShiftV">; } multiclass VNSHT_IV_V_X_I funct6> { def V : VALUVV, - Sched<[WriteVNShiftV_WorstCase, ReadVNShiftV_WorstCase, - ReadVNShiftV_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVNShiftV", "ReadVNShiftV", "ReadVNShiftV">; def X : VALUVX, - Sched<[WriteVNShiftX_WorstCase, ReadVNShiftV_WorstCase, - ReadVNShiftX_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVNShiftX", "ReadVNShiftV", "ReadVNShiftX">; def I : VALUVI, - Sched<[WriteVNShiftI_WorstCase, ReadVNShiftV_WorstCase, - ReadVMask]>; + SchedUnaryMC<"WriteVNShiftI", "ReadVNShiftV">; } multiclass VMINMAX_IV_V_X funct6> { def V : VALUVV, - Sched<[WriteVIMinMaxV_WorstCase, ReadVIMinMaxV_WorstCase, - ReadVIMinMaxV_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVIMinMaxV", "ReadVIMinMaxV", "ReadVIMinMaxV">; def X : VALUVX, - Sched<[WriteVIMinMaxX_WorstCase, ReadVIMinMaxV_WorstCase, - ReadVIMinMaxX_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVIMinMaxX", "ReadVIMinMaxV", "ReadVIMinMaxX">; } multiclass VCMP_IV_V funct6> { def V : VALUVV, - Sched<[WriteVICmpV_WorstCase, ReadVICmpV_WorstCase, - ReadVICmpV_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVICmpV", "ReadVICmpV", "ReadVICmpV">; } multiclass VCMP_IV_X funct6> { def X : VALUVX, - Sched<[WriteVICmpX_WorstCase, ReadVICmpV_WorstCase, - ReadVICmpX_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVICmpX", "ReadVICmpV", "ReadVICmpX">; } multiclass VCMP_IV_I funct6> { def I : VALUVI, - Sched<[WriteVICmpI_WorstCase, ReadVICmpV_WorstCase, - ReadVMask]>; + SchedUnaryMC<"WriteVICmpI", "ReadVICmpV">; } multiclass VCMP_IV_V_X_I funct6> @@ -850,126 +887,101 @@ multiclass VMUL_MV_V_X funct6> { def V : VALUVV, - Sched<[WriteVIMulV_WorstCase, ReadVIMulV_WorstCase, - ReadVIMulV_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVIMulV", "ReadVIMulV", "ReadVIMulV">; def X : VALUVX, - Sched<[WriteVIMulX_WorstCase, ReadVIMulV_WorstCase, - ReadVIMulX_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVIMulX", "ReadVIMulV", "ReadVIMulX">; } multiclass VWMUL_MV_V_X funct6> { def V : VALUVV, - Sched<[WriteVIWMulV_WorstCase, ReadVIWMulV_WorstCase, - ReadVIWMulV_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVIWMulV", "ReadVIWMulV", "ReadVIWMulV">; def X : VALUVX, - Sched<[WriteVIWMulX_WorstCase, ReadVIWMulV_WorstCase, - ReadVIWMulX_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVIWMulX", "ReadVIWMulV", "ReadVIWMulX">; } multiclass VDIV_MV_V_X funct6> { def V : VALUVV, - Sched<[WriteVIDivV_WorstCase, ReadVIDivV_WorstCase, - ReadVIDivV_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVIDivV", "ReadVIDivV", "ReadVIDivV">; def X : VALUVX, - Sched<[WriteVIDivX_WorstCase, ReadVIDivV_WorstCase, - ReadVIDivX_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVIDivX", "ReadVIDivV", "ReadVIDivX">; } multiclass VSALU_IV_V_X funct6> { def V : VALUVV, - Sched<[WriteVSALUV_WorstCase, ReadVSALUV_WorstCase, - ReadVSALUV_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVSALUV", "ReadVSALUV", "ReadVSALUV">; def X : VALUVX, - Sched<[WriteVSALUX_WorstCase, ReadVSALUV_WorstCase, - ReadVSALUX_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVSALUX", "ReadVSALUV", "ReadVSALUX">; } multiclass VSALU_IV_V_X_I funct6> : VSALU_IV_V_X { def I : VALUVI, - Sched<[WriteVSALUI_WorstCase, ReadVSALUV_WorstCase, - ReadVMask]>; + SchedUnaryMC<"WriteVSALUI", "ReadVSALUV">; } multiclass VAALU_MV_V_X funct6> { def V : VALUVV, - Sched<[WriteVAALUV_WorstCase, ReadVAALUV_WorstCase, - ReadVAALUV_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVAALUV", "ReadVAALUV", "ReadVAALUV">; def X : VALUVX, - Sched<[WriteVAALUX_WorstCase, ReadVAALUV_WorstCase, - ReadVAALUX_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVAALUX", "ReadVAALUV", "ReadVAALUX">; } multiclass VSMUL_IV_V_X funct6> { def V : VALUVV, - Sched<[WriteVSMulV_WorstCase, ReadVSMulV_WorstCase, - ReadVSMulV_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVSMulV", "ReadVSMulV", "ReadVSMulV">; def X : VALUVX, - Sched<[WriteVSMulX_WorstCase, ReadVSMulV_WorstCase, - ReadVSMulX_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVSMulX", "ReadVSMulV", "ReadVSMulX">; } multiclass VSSHF_IV_V_X_I funct6> { def V : VALUVV, - Sched<[WriteVSShiftV_WorstCase, ReadVSShiftV_WorstCase, - ReadVSShiftV_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVSShiftV", "ReadVSShiftV", "ReadVSShiftV">; def X : VALUVX, - Sched<[WriteVSShiftX_WorstCase, ReadVSShiftV_WorstCase, - ReadVSShiftX_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVSShiftX", "ReadVSShiftV", "ReadVSShiftX">; def I : VALUVI, - Sched<[WriteVSShiftI_WorstCase, ReadVSShiftV_WorstCase, - ReadVMask]>; + SchedUnaryMC<"WriteVSShiftI", "ReadVSShiftV">; } multiclass VNCLP_IV_V_X_I funct6> { def V : VALUVV, - Sched<[WriteVNClipV_WorstCase, ReadVNClipV_WorstCase, - ReadVNClipV_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVNClipV", "ReadVNClipV", "ReadVNClipV">; def X : VALUVX, - Sched<[WriteVNClipX_WorstCase, ReadVNClipV_WorstCase, - ReadVNClipX_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVNClipX", "ReadVNClipV", "ReadVNClipX">; def I : VALUVI, - Sched<[WriteVNClipI_WorstCase, ReadVNClipV_WorstCase, - ReadVMask]>; + SchedUnaryMC<"WriteVNClipI", "ReadVNClipV">; } multiclass VSLD_IV_X_I funct6> { def X : VALUVX, - Sched<[WriteVISlideX_WorstCase, ReadVISlideV_WorstCase, - ReadVISlideX_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVISlideX", "ReadVISlideV", "ReadVISlideX">; def I : VALUVI, - Sched<[WriteVISlideI_WorstCase, ReadVISlideV_WorstCase, - ReadVMask]>; + SchedUnaryMC<"WriteVISlideI", "ReadVISlideV">; } multiclass VSLD1_MV_X funct6> { def X : VALUVX, - Sched<[WriteVISlide1X_WorstCase, ReadVISlideV_WorstCase, - ReadVISlideX_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVISlide1X", "ReadVISlideV", "ReadVISlideX">; } multiclass VSLD1_FV_F funct6> { def F : VALUVF, - Sched<[WriteVFSlide1F_WorstCase, ReadVFSlideV_WorstCase, - ReadVFSlideF_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVFSlide1F", "ReadVFSlideV", "ReadVFSlideF">; } multiclass VGTR_IV_V_X_I funct6> { def V : VALUVV, - Sched<[WriteVRGatherVV_WorstCase, ReadVRGatherVV_data_WorstCase, - ReadVRGatherVV_index_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVRGatherVV", "ReadVRGatherVV_data", + "ReadVRGatherVV_index">; def X : VALUVX, - Sched<[WriteVRGatherVX_WorstCase, ReadVRGatherVX_data_WorstCase, - ReadVRGatherVX_index_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVRGatherVX", "ReadVRGatherVX_data", + "ReadVRGatherVX_index">; def I : VALUVI, - Sched<[WriteVRGatherVI_WorstCase, ReadVRGatherVI_data_WorstCase, - ReadVMask]>; + SchedUnaryMC<"WriteVRGatherVI", "ReadVRGatherVI_data">; } multiclass VCPR_MV_Mask funct6, string vm = "v"> { def M : VALUVVNoVm, - Sched<[WriteVCompressV_WorstCase, ReadVCompressV_WorstCase, - ReadVCompressV_WorstCase]>; + SchedBinaryMC<"WriteVCompressV", "ReadVCompressV", "ReadVCompressV">; } multiclass VWholeLoadN nf, string opcodestr, RegisterClass VRC> { @@ -1007,15 +1019,15 @@ defvar w = !cast("LSWidth" # eew); // Vector Unit-Stride Instructions - def VLE#eew#_V : VUnitStrideLoad, VLESched; - def VSE#eew#_V : VUnitStrideStore, VSESched; + def VLE#eew#_V : VUnitStrideLoad, VLESchedMC; + def VSE#eew#_V : VUnitStrideStore, VSESchedMC; // Vector Unit-Stride Fault-only-First Loads - def VLE#eew#FF_V : VUnitStrideLoadFF, VLFSched; + def VLE#eew#FF_V : VUnitStrideLoadFF, VLFSchedMC; // Vector Strided Instructions - def VLSE#eew#_V : VStridedLoad, VLSSched; - def VSSE#eew#_V : VStridedStore, VSSSched; + def VLSE#eew#_V : VStridedLoad, VLSSchedMC; + def VSSE#eew#_V : VStridedStore, VSSSchedMC; } defm "" : VIndexLoadStore<[8, 16, 32]>; @@ -1054,19 +1066,19 @@ let Predicates = [HasVInstructionsI64] in { // Vector Unit-Stride Instructions def VLE64_V : VUnitStrideLoad, - VLESched; + VLESchedMC; def VLE64FF_V : VUnitStrideLoadFF, - VLFSched; + VLFSchedMC; def VSE64_V : VUnitStrideStore, - VSESched; + VSESchedMC; // Vector Strided Instructions def VLSE64_V : VStridedLoad, - VLSSched<32>; + VLSSchedMC<32>; def VSSE64_V : VStridedStore, - VSSSched<64>; + VSSSchedMC<64>; defm VL1R: VWholeLoadEEW64<0, "vl1r", VR, WriteVLD1R>; defm VL2R: VWholeLoadEEW64<1, "vl2r", VRM2, WriteVLD2R>; @@ -1284,15 +1296,15 @@ // op vd, vs1 def VMV_V_V : RVInstVV<0b010111, OPIVV, (outs VR:$vd), (ins VR:$vs1), "vmv.v.v", "$vd, $vs1">, - Sched<[WriteVIMovV_WorstCase, ReadVIMovV_WorstCase]>; + SchedUnaryMC<"WriteVIMovV", "ReadVIMovV", forceMasked=0>; // op vd, rs1 def VMV_V_X : RVInstVX<0b010111, OPIVX, (outs VR:$vd), (ins GPR:$rs1), "vmv.v.x", "$vd, $rs1">, - Sched<[WriteVIMovX_WorstCase, ReadVIMovX_WorstCase]>; + SchedUnaryMC<"WriteVIMovX", "ReadVIMovX", forceMasked=0>; // op vd, imm def VMV_V_I : RVInstIVI<0b010111, (outs VR:$vd), (ins simm5:$imm), "vmv.v.i", "$vd, $imm">, - Sched<[WriteVIMovI_WorstCase]>; + SchedNullaryMC<"WriteVIMovI", forceMasked=0>; } // hasSideEffects = 0, mayLoad = 0, mayStore = 0 // Vector Fixed-Point Arithmetic Instructions @@ -1435,15 +1447,14 @@ def VFMERGE_VFM : RVInstVX<0b010111, OPFVF, (outs VR:$vd), (ins VR:$vs2, FPR32:$rs1, VMV0:$v0), "vfmerge.vfm", "$vd, $vs2, $rs1, v0">, - Sched<[WriteVFMergeV_WorstCase, ReadVFMergeV_WorstCase, - ReadVFMergeF_WorstCase, ReadVMask]>; + SchedBinaryMC<"WriteVFMergeV", "ReadVFMergeV", "ReadVFMergeF">; // Vector Floating-Point Move Instruction let RVVConstraint = NoConstraint in let vm = 1, vs2 = 0 in def VFMV_V_F : RVInstVX<0b010111, OPFVF, (outs VR:$vd), (ins FPR32:$rs1), "vfmv.v.f", "$vd, $rs1">, - Sched<[WriteVFMovV_WorstCase, ReadVFMovF_WorstCase]>; + SchedUnaryMC<"WriteVFMovV", "ReadVFMovF", forceMasked=0>; } // hasSideEffects = 0, mayLoad = 0, mayStore = 0 @@ -1584,15 +1595,13 @@ def VCPOP_M : RVInstV<0b010000, 0b10000, OPMVV, (outs GPR:$vd), (ins VR:$vs2, VMaskOp:$vm), "vcpop.m", "$vd, $vs2$vm">, - Sched<[WriteVMPopV_WorstCase, ReadVMPopV_WorstCase, - ReadVMask]>; + SchedUnaryMC<"WriteVMPopV", "ReadVMPopV">; // vfirst find-first-set mask bit def VFIRST_M : RVInstV<0b010000, 0b10001, OPMVV, (outs GPR:$vd), (ins VR:$vs2, VMaskOp:$vm), "vfirst.m", "$vd, $vs2$vm">, - Sched<[WriteVMFFSV_WorstCase, ReadVMFFSV_WorstCase, - ReadVMask]>; + SchedUnaryMC<"WriteVMFFSV", "ReadVMFFSV">; } // hasSideEffects = 0, mayLoad = 0, mayStore = 0 @@ -1618,7 +1627,7 @@ let vs2 = 0 in def VID_V : RVInstV<0b010100, 0b10001, OPMVV, (outs VR:$vd), (ins VMaskOp:$vm), "vid.v", "$vd$vm">, - Sched<[WriteVMIdxV_WorstCase, ReadVMask]>; + SchedNullaryMC<"WriteVMIdxV">; // Integer Scalar Move Instructions let vm = 1, RVVConstraint = NoConstraint in { @@ -1674,8 +1683,8 @@ let Constraints = "@earlyclobber $vd", RVVConstraint = Vrgather in { defm VRGATHER_V : VGTR_IV_V_X_I<"vrgather", 0b001100>; def VRGATHEREI16_VV : VALUVV<0b001110, OPIVV, "vrgatherei16.vv">, - Sched<[WriteVRGatherVV_WorstCase, ReadVRGatherVV_data_WorstCase, - ReadVRGatherVV_index_WorstCase]>; + SchedBinaryMC<"WriteVRGatherVV", "ReadVRGatherVV_data", + "ReadVRGatherVV_index">; } // Constraints = "@earlyclobber $vd", RVVConstraint = Vrgather // Vector Compress Instruction @@ -1705,38 +1714,38 @@ def VLSEG#nf#E#eew#_V : VUnitStrideSegmentLoad, - VLSEGSched; + VLSEGSchedMC; def VLSEG#nf#E#eew#FF_V : VUnitStrideSegmentLoadFF, - VLSEGFFSched; + VLSEGFFSchedMC; def VSSEG#nf#E#eew#_V : VUnitStrideSegmentStore, - VSSEGSched; + VSSEGSchedMC; // Vector Strided Instructions def VLSSEG#nf#E#eew#_V : VStridedSegmentLoad, - VLSSEGSched; + VLSSEGSchedMC; def VSSSEG#nf#E#eew#_V : VStridedSegmentStore, - VSSSEGSched; + VSSSEGSchedMC; // Vector Indexed Instructions def VLUXSEG#nf#EI#eew#_V : VIndexedSegmentLoad, - VLXSEGSched; + VLXSEGSchedMC; def VLOXSEG#nf#EI#eew#_V : VIndexedSegmentLoad, - VLXSEGSched; + VLXSEGSchedMC; def VSUXSEG#nf#EI#eew#_V : VIndexedSegmentStore, - VSXSEGSched; + VSXSEGSchedMC; def VSOXSEG#nf#EI#eew#_V : VIndexedSegmentStore, - VSXSEGSched; + VSXSEGSchedMC; } } } // Predicates = [HasVInstructions] @@ -1746,21 +1755,21 @@ // Vector Unit-strided Segment Instructions def VLSEG#nf#E64_V : VUnitStrideSegmentLoad, - VLSEGSched; + VLSEGSchedMC; def VLSEG#nf#E64FF_V : VUnitStrideSegmentLoadFF, - VLSEGFFSched; + VLSEGFFSchedMC; def VSSEG#nf#E64_V : VUnitStrideSegmentStore, - VSSEGSched; + VSSEGSchedMC; // Vector Strided Segment Instructions def VLSSEG#nf#E64_V : VStridedSegmentLoad, - VLSSEGSched; + VLSSEGSchedMC; def VSSSEG#nf#E64_V : VStridedSegmentStore, - VSSSEGSched; + VSSSEGSchedMC; } } // Predicates = [HasVInstructionsI64] let Predicates = [HasVInstructionsI64, IsRV64] in { @@ -1769,19 +1778,19 @@ def VLUXSEG #nf #EI64_V : VIndexedSegmentLoad, - VLXSEGSched; + VLXSEGSchedMC; def VLOXSEG #nf #EI64_V : VIndexedSegmentLoad, - VLXSEGSched; + VLXSEGSchedMC; def VSUXSEG #nf #EI64_V : VIndexedSegmentStore, - VSXSEGSched; + VSXSEGSchedMC; def VSOXSEG #nf #EI64_V : VIndexedSegmentStore, - VSXSEGSched; + VSXSEGSchedMC; } } // Predicates = [HasVInstructionsI64, IsRV64] diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td b/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td --- a/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td +++ b/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td @@ -1871,13 +1871,11 @@ multiclass VPseudoVPOP_M { foreach mti = AllMasks in { defvar mx = mti.LMul.MX; - defvar WriteVMPopV_MX = !cast("WriteVMPopV_" # mx); - defvar ReadVMPopV_MX = !cast("ReadVMPopV_" # mx); let VLMul = mti.LMul.value in { def "_M_" # mti.BX : VPseudoUnaryNoMaskGPROut, - Sched<[WriteVMPopV_MX, ReadVMPopV_MX, ReadVMPopV_MX]>; + SchedBinary<"WriteVMPopV", "ReadVMPopV", "ReadVMPopV", mx>; def "_M_" # mti.BX # "_MASK" : VPseudoUnaryMaskGPROut, - Sched<[WriteVMPopV_MX, ReadVMPopV_MX, ReadVMPopV_MX]>; + SchedBinary<"WriteVMPopV", "ReadVMPopV", "ReadVMPopV", mx>; } } } @@ -1885,13 +1883,11 @@ multiclass VPseudoV1ST_M { foreach mti = AllMasks in { defvar mx = mti.LMul.MX; - defvar WriteVMFFSV_MX = !cast("WriteVMFFSV_" # mx); - defvar ReadVMFFSV_MX = !cast("ReadVMFFSV_" # mx); let VLMul = mti.LMul.value in { def "_M_" # mti.BX : VPseudoUnaryNoMaskGPROut, - Sched<[WriteVMFFSV_MX, ReadVMFFSV_MX, ReadVMFFSV_MX]>; + SchedBinary<"WriteVMFFSV", "ReadVMFFSV", "ReadVMFFSV", mx>; def "_M_" # mti.BX # "_MASK" : VPseudoUnaryMaskGPROut, - Sched<[WriteVMFFSV_MX, ReadVMFFSV_MX, ReadVMFFSV_MX]>; + SchedBinary<"WriteVMFFSV", "ReadVMFFSV", "ReadVMFFSV", mx>; } } } @@ -1900,13 +1896,11 @@ defvar constraint = "@earlyclobber $rd"; foreach mti = AllMasks in { defvar mx = mti.LMul.MX; - defvar WriteVMSFSV_MX = !cast("WriteVMSFSV_" # mx); - defvar ReadVMSFSV_MX = !cast("ReadVMSFSV_" # mx); let VLMul = mti.LMul.value in { def "_M_" # mti.BX : VPseudoUnaryNoMask, - Sched<[WriteVMSFSV_MX, ReadVMSFSV_MX, ReadVMask]>; + SchedUnary<"WriteVMSFSV", "ReadVMSFSV", mx>; def "_M_" # mti.BX # "_MASK" : VPseudoUnaryMask, - Sched<[WriteVMSFSV_MX, ReadVMSFSV_MX, ReadVMask]>; + SchedUnary<"WriteVMSFSV", "ReadVMSFSV", mx>; } } } @@ -1914,28 +1908,21 @@ multiclass VPseudoVID_V { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVMIdxV_MX = !cast("WriteVMIdxV_" # mx); - defvar ReadVMIdxV_MX = !cast("ReadVMIdxV_" # mx); - let VLMul = m.value in { - def "_V_" # m.MX : VPseudoNullaryNoMask, - Sched<[WriteVMIdxV_MX, ReadVMask]>; - def "_V_" # m.MX # "_MASK" : VPseudoNullaryMask, + def "_V_" # mx : VPseudoNullaryNoMask, + SchedNullary<"WriteVMIdxV", mx>; + def "_V_" # mx # "_MASK" : VPseudoNullaryMask, RISCVMaskedPseudo, - Sched<[WriteVMIdxV_MX, ReadVMask]>; + SchedNullary<"WriteVMIdxV", mx>; } } } multiclass VPseudoNullaryPseudoM { foreach mti = AllMasks in { - defvar mx = mti.LMul.MX; - defvar WriteVMALUV_MX = !cast("WriteVMALUV_" # mx); - defvar ReadVMALUV_MX = !cast("ReadVMALUV_" # mx); - let VLMul = mti.LMul.value in { def "_M_" # mti.BX : VPseudoNullaryPseudoM, - Sched<[WriteVMALUV_MX, ReadVMALUV_MX, ReadVMALUV_MX]>; + SchedBinary<"WriteVMALUV", "ReadVMALUV", "ReadVMALUV", mti.LMul.MX>; } } } @@ -1944,14 +1931,12 @@ defvar constraint = "@earlyclobber $rd"; foreach m = MxList in { defvar mx = m.MX; - defvar WriteVMIotV_MX = !cast("WriteVMIotV_" # mx); - defvar ReadVMIotV_MX = !cast("ReadVMIotV_" # mx); let VLMul = m.value in { - def "_" # m.MX : VPseudoUnaryNoMask, - Sched<[WriteVMIotV_MX, ReadVMIotV_MX, ReadVMask]>; - def "_" # m.MX # "_MASK" : VPseudoUnaryMask, + def "_" # mx : VPseudoUnaryNoMask, + SchedUnary<"WriteVMIotV", "ReadVMIotV", mx>; + def "_" # mx # "_MASK" : VPseudoUnaryMask, RISCVMaskedPseudo, - Sched<[WriteVMIotV_MX, ReadVMIotV_MX, ReadVMask]>; + SchedUnary<"WriteVMIotV", "ReadVMIotV", mx>; } } } @@ -1963,12 +1948,10 @@ let VLMul = m.value in foreach e = sews in { defvar suffix = "_" # m.MX # "_E" # e; - defvar WriteVCompressV_MX_E = !cast("WriteVCompressV" # suffix); - defvar ReadVCompressV_MX_E = !cast("ReadVCompressV" # suffix); - let SEW = e in def _VM # suffix : VPseudoUnaryAnyMask, - Sched<[WriteVCompressV_MX_E, ReadVCompressV_MX_E, ReadVCompressV_MX_E]>; + SchedBinary<"WriteVCompressV", "ReadVCompressV", "ReadVCompressV", + mx, e>; } } } @@ -2098,11 +2081,9 @@ defvar emul = !cast("V_" # emulMX); defvar sews = SchedSEWSet.val; foreach e = sews in { - defvar WriteVRGatherVV_MX_E = !cast("WriteVRGatherVV_" # mx # "_E" # e); - defvar ReadVRGatherVV_data_MX_E = !cast("ReadVRGatherVV_data_" # mx # "_E" # e); - defvar ReadVRGatherVV_index_MX_E = !cast("ReadVRGatherVV_index_" # mx # "_E" # e); defm _VV : VPseudoBinaryEmul, - Sched<[WriteVRGatherVV_MX_E, ReadVRGatherVV_data_MX_E, ReadVRGatherVV_index_MX_E]>; + SchedBinary<"WriteVRGatherVV", "ReadVRGatherVV_data", "ReadVRGatherVV_index", + mx, e>; } } } @@ -2119,13 +2100,8 @@ multiclass VPseudoVSLD1_VX { foreach m = MxList in { - defvar mx = m.MX; - defvar WriteVISlide1X_MX = !cast("WriteVISlide1X_" # mx); - defvar ReadVISlideV_MX = !cast("ReadVISlideV_" # mx); - defvar ReadVISlideX_MX = !cast("ReadVISlideX_" # mx); - defm "_VX" : VPseudoBinary, - Sched<[WriteVISlide1X_MX, ReadVISlideV_MX, ReadVISlideX_MX, ReadVMask]>; + SchedBinary<"WriteVISlide1X", "ReadVISlideV", "ReadVISlideX", m.MX>; } } @@ -2143,14 +2119,9 @@ multiclass VPseudoVSLD1_VF { foreach f = FPList in { foreach m = f.MxList in { - defvar mx = m.MX; - defvar WriteVFSlide1F_MX = !cast("WriteVFSlide1F_" # mx); - defvar ReadVFSlideV_MX = !cast("ReadVFSlideV_" # mx); - defvar ReadVFSlideF_MX = !cast("ReadVFSlideF_" # mx); - defm "_V" # f.FX : VPseudoBinary, - Sched<[WriteVFSlide1F_MX, ReadVFSlideV_MX, ReadVFSlideF_MX, ReadVMask]>; + SchedBinary<"WriteVFSlide1F", "ReadVFSlideV", "ReadVFSlideF", m.MX>; } } } @@ -2166,12 +2137,9 @@ multiclass VPseudoVALU_MM { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVMALUV_MX = !cast("WriteVMALUV_" # mx); - defvar ReadVMALUV_MX = !cast("ReadVMALUV_" # mx); - let VLMul = m.value in { def "_MM_" # mx : VPseudoBinaryNoMask, - Sched<[WriteVMALUV_MX, ReadVMALUV_MX, ReadVMALUV_MX]>; + SchedBinary<"WriteVMALUV", "ReadVMALUV", "ReadVMALUV", mx>; } } } @@ -2315,14 +2283,10 @@ foreach f = FPList in { foreach m = f.MxList in { defvar mx = m.MX; - defvar WriteVFMergeV_MX = !cast("WriteVFMergeV_" # mx); - defvar ReadVFMergeV_MX = !cast("ReadVFMergeV_" # mx); - defvar ReadVFMergeF_MX = !cast("ReadVFMergeF_" # mx); - def "_V" # f.FX # "M_" # mx: VPseudoTiedBinaryCarryIn.R, m.vrclass, f.fprclass, m, CarryIn=1, Constraint="">, - Sched<[WriteVFMergeV_MX, ReadVFMergeV_MX, ReadVFMergeF_MX, ReadVMask]>; + SchedBinary<"WriteVFMergeV", "ReadVFMergeV", "ReadVFMergeF", mx, forceMasked=1>; } } } @@ -2346,19 +2310,13 @@ foreach m = MxList in { let VLMul = m.value in { defvar mx = m.MX; - defvar WriteVIMovV_MX = !cast("WriteVIMovV_" # mx); - defvar WriteVIMovX_MX = !cast("WriteVIMovX_" # mx); - defvar WriteVIMovI_MX = !cast("WriteVIMovI_" # mx); - defvar ReadVIMovV_MX = !cast("ReadVIMovV_" # mx); - defvar ReadVIMovX_MX = !cast("ReadVIMovX_" # mx); - let VLMul = m.value in { def "_V_" # mx : VPseudoUnaryNoMask, - Sched<[WriteVIMovV_MX, ReadVIMovV_MX]>; + SchedUnary<"WriteVIMovV", "ReadVIMovV", mx>; def "_X_" # mx : VPseudoUnaryNoMask, - Sched<[WriteVIMovX_MX, ReadVIMovX_MX]>; + SchedUnary<"WriteVIMovX", "ReadVIMovX", mx>; def "_I_" # mx : VPseudoUnaryNoMask, - Sched<[WriteVIMovI_MX]>; + SchedNullary<"WriteVIMovI", mx>; } } } @@ -2368,13 +2326,10 @@ foreach f = FPList in { foreach m = f.MxList in { defvar mx = m.MX; - defvar WriteVFMovV_MX = !cast("WriteVFMovV_" # mx); - defvar ReadVFMovF_MX = !cast("ReadVFMovF_" # mx); - let VLMul = m.value in { def "_" # f.FX # "_" # mx : VPseudoUnaryNoMask, - Sched<[WriteVFMovV_MX, ReadVFMovF_MX]>; + SchedUnary<"WriteVFMovV", "ReadVFMovF", mx>; } } } @@ -2383,15 +2338,12 @@ multiclass VPseudoVCLS_V { foreach m = MxListF in { defvar mx = m.MX; - defvar WriteVFClassV_MX = !cast("WriteVFClassV_" # mx); - defvar ReadVFClassV_MX = !cast("ReadVFClassV_" # mx); - let VLMul = m.value in { def "_V_" # mx : VPseudoUnaryNoMask, - Sched<[WriteVFClassV_MX, ReadVFClassV_MX, ReadVMask]>; + SchedUnary<"WriteVFClassV", "ReadVFClassV", mx>; def "_V_" # mx # "_MASK" : VPseudoUnaryMask, RISCVMaskedPseudo, - Sched<[WriteVFClassV_MX, ReadVFClassV_MX, ReadVMask]>; + SchedUnary<"WriteVFClassV", "ReadVFClassV", mx>; } } } @@ -2404,17 +2356,12 @@ let VLMul = m.value in foreach e = sews in { defvar suffix = "_" # mx # "_E" # e; - defvar WriteVFSqrtV_MX_E = !cast("WriteVFSqrtV" # suffix); - defvar ReadVFSqrtV_MX_E = !cast("ReadVFSqrtV" # suffix); - let SEW = e in { def "_V" # suffix : VPseudoUnaryNoMaskRoundingMode, - Sched<[WriteVFSqrtV_MX_E, ReadVFSqrtV_MX_E, - ReadVMask]>; + SchedUnary<"WriteVFSqrtV", "ReadVFSqrtV", mx, e>; def "_V" # suffix # "_MASK" : VPseudoUnaryMaskRoundingMode, RISCVMaskedPseudo, - Sched<[WriteVFSqrtV_MX_E, ReadVFSqrtV_MX_E, - ReadVMask]>; + SchedUnary<"WriteVFSqrtV", "ReadVFSqrtV", mx, e>; } } } @@ -2423,15 +2370,12 @@ multiclass VPseudoVRCP_V { foreach m = MxListF in { defvar mx = m.MX; - defvar WriteVFRecpV_MX = !cast("WriteVFRecpV_" # mx); - defvar ReadVFRecpV_MX = !cast("ReadVFRecpV_" # mx); - let VLMul = m.value in { def "_V_" # mx : VPseudoUnaryNoMask, - Sched<[WriteVFRecpV_MX, ReadVFRecpV_MX, ReadVMask]>; + SchedUnary<"WriteVFRecpV", "ReadVFRecpV", mx>; def "_V_" # mx # "_MASK" : VPseudoUnaryMask, RISCVMaskedPseudo, - Sched<[WriteVFRecpV_MX, ReadVFRecpV_MX, ReadVMask]>; + SchedUnary<"WriteVFRecpV", "ReadVFRecpV", mx>; } } } @@ -2439,15 +2383,12 @@ multiclass VPseudoVRCP_V_RM { foreach m = MxListF in { defvar mx = m.MX; - defvar WriteVFRecpV_MX = !cast("WriteVFRecpV_" # mx); - defvar ReadVFRecpV_MX = !cast("ReadVFRecpV_" # mx); - let VLMul = m.value in { def "_V_" # mx : VPseudoUnaryNoMaskRoundingMode, - Sched<[WriteVFRecpV_MX, ReadVFRecpV_MX, ReadVMask]>; + SchedUnary<"WriteVFRecpV", "ReadVFRecpV", mx>; def "_V_" # mx # "_MASK" : VPseudoUnaryMaskRoundingMode, RISCVMaskedPseudo, - Sched<[WriteVFRecpV_MX, ReadVFRecpV_MX, ReadVMask]>; + SchedUnary<"WriteVFRecpV", "ReadVFRecpV", mx>; } } } @@ -2456,16 +2397,13 @@ defvar constraints = "@earlyclobber $rd"; foreach m = MxListVF2 in { defvar mx = m.MX; - defvar WriteVExtV_MX = !cast("WriteVExtV_" # mx); - defvar ReadVExtV_MX = !cast("ReadVExtV_" # mx); - let VLMul = m.value in { def "_" # mx : VPseudoUnaryNoMask, - Sched<[WriteVExtV_MX, ReadVExtV_MX, ReadVMask]>; + SchedUnary<"WriteVExtV", "ReadVExtV", mx>; def "_" # mx # "_MASK" : VPseudoUnaryMask, RISCVMaskedPseudo, - Sched<[WriteVExtV_MX, ReadVExtV_MX, ReadVMask]>; + SchedUnary<"WriteVExtV", "ReadVExtV", mx>; } } } @@ -2474,16 +2412,13 @@ defvar constraints = "@earlyclobber $rd"; foreach m = MxListVF4 in { defvar mx = m.MX; - defvar WriteVExtV_MX = !cast("WriteVExtV_" # mx); - defvar ReadVExtV_MX = !cast("ReadVExtV_" # mx); - let VLMul = m.value in { def "_" # mx : VPseudoUnaryNoMask, - Sched<[WriteVExtV_MX, ReadVExtV_MX, ReadVMask]>; + SchedUnary<"WriteVExtV", "ReadVExtV", mx>; def "_" # mx # "_MASK" : VPseudoUnaryMask, RISCVMaskedPseudo, - Sched<[WriteVExtV_MX, ReadVExtV_MX, ReadVMask]>; + SchedUnary<"WriteVExtV", "ReadVExtV", mx>; } } } @@ -2492,16 +2427,13 @@ defvar constraints = "@earlyclobber $rd"; foreach m = MxListVF8 in { defvar mx = m.MX; - defvar WriteVExtV_MX = !cast("WriteVExtV_" # mx); - defvar ReadVExtV_MX = !cast("ReadVExtV_" # mx); - let VLMul = m.value in { def "_" # mx : VPseudoUnaryNoMask, - Sched<[WriteVExtV_MX, ReadVExtV_MX, ReadVMask]>; + SchedUnary<"WriteVExtV", "ReadVExtV", mx>; def "_" # mx # "_MASK" : VPseudoUnaryMask, RISCVMaskedPseudo, - Sched<[WriteVExtV_MX, ReadVExtV_MX, ReadVMask]>; + SchedUnary<"WriteVExtV", "ReadVExtV", mx>; } } } @@ -2542,26 +2474,17 @@ multiclass VPseudoVGTR_VV_VX_VI { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVRGatherVX_MX = !cast("WriteVRGatherVX_" # mx); - defvar WriteVRGatherVI_MX = !cast("WriteVRGatherVI_" # mx); - defvar ReadVRGatherVX_data_MX = !cast("ReadVRGatherVX_data_" # mx); - defvar ReadVRGatherVX_index_MX = !cast("ReadVRGatherVX_index_" # mx); - defvar ReadVRGatherVI_data_MX = !cast("ReadVRGatherVI_data_" # mx); - defm "" : VPseudoBinaryV_VX, - Sched<[WriteVRGatherVX_MX, ReadVRGatherVX_data_MX, - ReadVRGatherVX_index_MX, ReadVMask]>; + SchedBinary<"WriteVRGatherVX", "ReadVRGatherVX_data", + "ReadVRGatherVX_index", mx>; defm "" : VPseudoBinaryV_VI, - Sched<[WriteVRGatherVI_MX, ReadVRGatherVI_data_MX, ReadVMask]>; + SchedUnary<"WriteVRGatherVI", "ReadVRGatherVI_data", mx>; defvar sews = SchedSEWSet.val; foreach e = sews in { - defvar WriteVRGatherVV_MX_E = !cast("WriteVRGatherVV_" # mx # "_E" # e); - defvar ReadVRGatherVV_data_MX_E = !cast("ReadVRGatherVV_data_" # mx # "_E" # e); - defvar ReadVRGatherVV_index_MX_E = !cast("ReadVRGatherVV_index_" # mx # "_E" # e); defm "" : VPseudoBinaryV_VV, - Sched<[WriteVRGatherVV_MX_E, ReadVRGatherVV_data_MX_E, - ReadVRGatherVV_index_MX_E, ReadVMask]>; + SchedBinary<"WriteVRGatherVV", "ReadVRGatherVV_data", + "ReadVRGatherVV_index", mx, e>; } } } @@ -2569,18 +2492,12 @@ multiclass VPseudoVSALU_VV_VX_VI { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVSALUV_MX = !cast("WriteVSALUV_" # mx); - defvar WriteVSALUX_MX = !cast("WriteVSALUX_" # mx); - defvar WriteVSALUI_MX = !cast("WriteVSALUI_" # mx); - defvar ReadVSALUV_MX = !cast("ReadVSALUV_" # mx); - defvar ReadVSALUX_MX = !cast("ReadVSALUX_" # mx); - defm "" : VPseudoBinaryV_VV, - Sched<[WriteVSALUV_MX, ReadVSALUV_MX, ReadVSALUV_MX, ReadVMask]>; + SchedBinary<"WriteVSALUV", "ReadVSALUV", "ReadVSALUX", mx>; defm "" : VPseudoBinaryV_VX, - Sched<[WriteVSALUX_MX, ReadVSALUV_MX, ReadVSALUX_MX, ReadVMask]>; + SchedBinary<"WriteVSALUX", "ReadVSALUV", "ReadVSALUX", mx>; defm "" : VPseudoBinaryV_VI, - Sched<[WriteVSALUI_MX, ReadVSALUV_MX, ReadVMask]>; + SchedUnary<"WriteVSALUI", "ReadVSALUV", mx>; } } @@ -2588,129 +2505,86 @@ multiclass VPseudoVSHT_VV_VX_VI { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVShiftV_MX = !cast("WriteVShiftV_" # mx); - defvar WriteVShiftX_MX = !cast("WriteVShiftX_" # mx); - defvar WriteVShiftI_MX = !cast("WriteVShiftI_" # mx); - defvar ReadVShiftV_MX = !cast("ReadVShiftV_" # mx); - defvar ReadVShiftX_MX = !cast("ReadVShiftX_" # mx); - defm "" : VPseudoBinaryV_VV, - Sched<[WriteVShiftV_MX, ReadVShiftV_MX, ReadVShiftV_MX, ReadVMask]>; + SchedBinary<"WriteVShiftV", "ReadVShiftV", "ReadVShiftV", mx>; defm "" : VPseudoBinaryV_VX, - Sched<[WriteVShiftX_MX, ReadVShiftV_MX, ReadVShiftX_MX, ReadVMask]>; + SchedBinary<"WriteVShiftX", "ReadVShiftV", "ReadVShiftX", mx>; defm "" : VPseudoBinaryV_VI, - Sched<[WriteVShiftI_MX, ReadVShiftV_MX, ReadVMask]>; + SchedUnary<"WriteVShiftI", "ReadVShiftV", mx>; } } multiclass VPseudoVSSHT_VV_VX_VI_RM { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVSShiftV_MX = !cast("WriteVSShiftV_" # mx); - defvar WriteVSShiftX_MX = !cast("WriteVSShiftX_" # mx); - defvar WriteVSShiftI_MX = !cast("WriteVSShiftI_" # mx); - defvar ReadVSShiftV_MX = !cast("ReadVSShiftV_" # mx); - defvar ReadVSShiftX_MX = !cast("ReadVSShiftX_" # mx); - defm "" : VPseudoBinaryV_VV_RM, - Sched<[WriteVSShiftV_MX, ReadVSShiftV_MX, ReadVSShiftV_MX, ReadVMask]>; + SchedBinary<"WriteVSShiftV", "ReadVSShiftV", "ReadVSShiftV", mx>; defm "" : VPseudoBinaryV_VX_RM, - Sched<[WriteVSShiftX_MX, ReadVSShiftV_MX, ReadVSShiftX_MX, ReadVMask]>; + SchedBinary<"WriteVSShiftX", "ReadVSShiftV", "ReadVSShiftX", mx>; defm "" : VPseudoBinaryV_VI_RM, - Sched<[WriteVSShiftI_MX, ReadVSShiftV_MX, ReadVMask]>; + SchedUnary<"WriteVSShiftI", "ReadVSShiftV", mx>; } } multiclass VPseudoVALU_VV_VX_VI { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVIALUV_MX = !cast("WriteVIALUV_" # mx); - defvar WriteVIALUX_MX = !cast("WriteVIALUX_" # mx); - defvar WriteVIALUI_MX = !cast("WriteVIALUI_" # mx); - defvar ReadVIALUV_MX = !cast("ReadVIALUV_" # mx); - defvar ReadVIALUX_MX = !cast("ReadVIALUX_" # mx); - defm "" : VPseudoBinaryV_VV, - Sched<[WriteVIALUV_MX, ReadVIALUV_MX, ReadVIALUV_MX, ReadVMask]>; + SchedBinary<"WriteVIALUV", "ReadVIALUV", "ReadVIALUV", mx>; defm "" : VPseudoBinaryV_VX, - Sched<[WriteVIALUX_MX, ReadVIALUV_MX, ReadVIALUX_MX, ReadVMask]>; + SchedBinary<"WriteVIALUX", "ReadVIALUV", "ReadVIALUX", mx>; defm "" : VPseudoBinaryV_VI, - Sched<[WriteVIALUI_MX, ReadVIALUV_MX, ReadVMask]>; + SchedUnary<"WriteVIALUI", "ReadVIALUV", mx>; } } multiclass VPseudoVSALU_VV_VX { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVSALUV_MX = !cast("WriteVSALUV_" # mx); - defvar WriteVSALUX_MX = !cast("WriteVSALUX_" # mx); - defvar ReadVSALUV_MX = !cast("ReadVSALUV_" # mx); - defvar ReadVSALUX_MX = !cast("ReadVSALUX_" # mx); - defm "" : VPseudoBinaryV_VV, - Sched<[WriteVSALUV_MX, ReadVSALUV_MX, ReadVSALUV_MX, ReadVMask]>; + SchedBinary<"WriteVSALUV", "ReadVSALUV", "ReadVSALUV", mx>; defm "" : VPseudoBinaryV_VX, - Sched<[WriteVSALUX_MX, ReadVSALUV_MX, ReadVSALUX_MX, ReadVMask]>; + SchedBinary<"WriteVSALUX", "ReadVSALUV", "ReadVSALUX", mx>; } } multiclass VPseudoVSMUL_VV_VX_RM { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVSMulV_MX = !cast("WriteVSMulV_" # mx); - defvar WriteVSMulX_MX = !cast("WriteVSMulX_" # mx); - defvar ReadVSMulV_MX = !cast("ReadVSMulV_" # mx); - defvar ReadVSMulX_MX = !cast("ReadVSMulX_" # mx); - defm "" : VPseudoBinaryV_VV_RM, - Sched<[WriteVSMulV_MX, ReadVSMulV_MX, ReadVSMulV_MX, ReadVMask]>; + SchedBinary<"WriteVSMulV", "ReadVSMulV", "ReadVSMulV", mx>; defm "" : VPseudoBinaryV_VX_RM, - Sched<[WriteVSMulX_MX, ReadVSMulV_MX, ReadVSMulX_MX, ReadVMask]>; + SchedBinary<"WriteVSMulX", "ReadVSMulV", "ReadVSMulX", mx>; } } multiclass VPseudoVAALU_VV_VX_RM { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVAALUV_MX = !cast("WriteVAALUV_" # mx); - defvar WriteVAALUX_MX = !cast("WriteVAALUX_" # mx); - defvar ReadVAALUV_MX = !cast("ReadVAALUV_" # mx); - defvar ReadVAALUX_MX = !cast("ReadVAALUX_" # mx); - defm "" : VPseudoBinaryV_VV_RM, - Sched<[WriteVAALUV_MX, ReadVAALUV_MX, ReadVAALUV_MX, ReadVMask]>; + SchedBinary<"WriteVAALUV", "ReadVAALUV", "ReadVAALUV", mx>; defm "" : VPseudoBinaryV_VX_RM, - Sched<[WriteVAALUX_MX, ReadVAALUV_MX, ReadVAALUX_MX, ReadVMask]>; + SchedBinary<"WriteVAALUX", "ReadVAALUV", "ReadVAALUX", mx>; } } multiclass VPseudoVMINMAX_VV_VX { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVIMinMaxV_MX = !cast("WriteVIMinMaxV_" # mx); - defvar WriteVIMinMaxX_MX = !cast("WriteVIMinMaxX_" # mx); - defvar ReadVIMinMaxV_MX = !cast("ReadVIMinMaxV_" # mx); - defvar ReadVIMinMaxX_MX = !cast("ReadVIMinMaxX_" # mx); - defm "" : VPseudoBinaryV_VV, - Sched<[WriteVIMinMaxV_MX, ReadVIMinMaxV_MX, ReadVIMinMaxV_MX, ReadVMask]>; + SchedBinary<"WriteVIMinMaxV", "ReadVIMinMaxV", "ReadVIMinMaxV", mx>; defm "" : VPseudoBinaryV_VX, - Sched<[WriteVIMinMaxX_MX, ReadVIMinMaxV_MX, ReadVIMinMaxX_MX, ReadVMask]>; + SchedBinary<"WriteVIMinMaxX", "ReadVIMinMaxV", "ReadVIMinMaxX", mx>; } } multiclass VPseudoVMUL_VV_VX { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVIMulV_MX = !cast("WriteVIMulV_" # mx); - defvar WriteVIMulX_MX = !cast("WriteVIMulX_" # mx); - defvar ReadVIMulV_MX = !cast("ReadVIMulV_" # mx); - defvar ReadVIMulX_MX = !cast("ReadVIMulX_" # mx); - defm "" : VPseudoBinaryV_VV, - Sched<[WriteVIMulV_MX, ReadVIMulV_MX, ReadVIMulV_MX, ReadVMask]>; + SchedBinary<"WriteVIMulV", "ReadVIMulV", "ReadVIMulV", mx>; defm "" : VPseudoBinaryV_VX, - Sched<[WriteVIMulX_MX, ReadVIMulV_MX, ReadVIMulX_MX, ReadVMask]>; + SchedBinary<"WriteVIMulX", "ReadVIMulV", "ReadVIMulX", mx>; } } @@ -2719,38 +2593,24 @@ defvar mx = m.MX; defvar sews = SchedSEWSet.val; foreach e = sews in { - defvar WriteVIDivV_MX_E = !cast("WriteVIDivV_" # mx # "_E" # e); - defvar WriteVIDivX_MX_E = !cast("WriteVIDivX_" # mx # "_E" # e); - defvar ReadVIDivV_MX_E = !cast("ReadVIDivV_" # mx # "_E" # e); - defvar ReadVIDivX_MX_E = !cast("ReadVIDivX_" # mx # "_E" # e); - defm "" : VPseudoBinaryV_VV, - Sched<[WriteVIDivV_MX_E, ReadVIDivV_MX_E, ReadVIDivV_MX_E, ReadVMask]>; + SchedBinary<"WriteVIDivV", "ReadVIDivV", "ReadVIDivV", mx, e>; defm "" : VPseudoBinaryV_VX, - Sched<[WriteVIDivX_MX_E, ReadVIDivV_MX_E, ReadVIDivX_MX_E, ReadVMask]>; + SchedBinary<"WriteVIDivX", "ReadVIDivV", "ReadVIDivX", mx, e>; } } } multiclass VPseudoVFMUL_VV_VF_RM { foreach m = MxListF in { - defvar mx = m.MX; - defvar WriteVFMulV_MX = !cast("WriteVFMulV_" # mx); - defvar ReadVFMulV_MX = !cast("ReadVFMulV_" # mx); - defm "" : VPseudoBinaryFV_VV_RM, - Sched<[WriteVFMulV_MX, ReadVFMulV_MX, ReadVFMulV_MX, ReadVMask]>; + SchedBinary<"WriteVFMulV", "ReadVFMulV", "ReadVFMulV", m.MX>; } foreach f = FPList in { foreach m = f.MxList in { - defvar mx = m.MX; - defvar WriteVFMulF_MX = !cast("WriteVFMulF_" # mx); - defvar ReadVFMulV_MX = !cast("ReadVFMulV_" # mx); - defvar ReadVFMulF_MX = !cast("ReadVFMulF_" # mx); - defm "" : VPseudoBinaryV_VF_RM, - Sched<[WriteVFMulF_MX, ReadVFMulV_MX, ReadVFMulF_MX, ReadVMask]>; + SchedBinary<"WriteVFMulF", "ReadVFMulV", "ReadVFMulF", m.MX>; } } } @@ -2760,23 +2620,15 @@ defvar mx = m.MX; defvar sews = SchedSEWSet.val; foreach e = sews in { - defvar WriteVFDivV_MX_E = !cast("WriteVFDivV_" # mx # "_E" # e); - defvar ReadVFDivV_MX_E = !cast("ReadVFDivV_" # mx # "_E" # e); - defm "" : VPseudoBinaryFV_VV_RM, - Sched<[WriteVFDivV_MX_E, ReadVFDivV_MX_E, ReadVFDivV_MX_E, ReadVMask]>; + SchedBinary<"WriteVFDivV", "ReadVFDivV", "ReadVFDivV", mx, e>; } } foreach f = FPList in { foreach m = f.MxList in { - defvar mx = m.MX; - defvar WriteVFDivF_MX_E = !cast("WriteVFDivF_" # mx # "_E" # f.SEW); - defvar ReadVFDivV_MX_E = !cast("ReadVFDivV_" # mx # "_E" # f.SEW); - defvar ReadVFDivF_MX_E = !cast("ReadVFDivF_" # mx # "_E" # f.SEW); - defm "" : VPseudoBinaryV_VF_RM, - Sched<[WriteVFDivF_MX_E, ReadVFDivV_MX_E, ReadVFDivF_MX_E, ReadVMask]>; + SchedBinary<"WriteVFDivF", "ReadVFDivV", "ReadVFDivF", m.MX, f.SEW>; } } } @@ -2784,118 +2636,73 @@ multiclass VPseudoVFRDIV_VF_RM { foreach f = FPList in { foreach m = f.MxList in { - defvar mx = m.MX; - defvar WriteVFDivF_MX_E = !cast("WriteVFDivF_" # mx # "_E" # f.SEW); - defvar ReadVFDivV_MX_E = !cast("ReadVFDivV_" # mx # "_E" # f.SEW); - defvar ReadVFDivF_MX_E = !cast("ReadVFDivF_" # mx # "_E" # f.SEW); - defm "" : VPseudoBinaryV_VF_RM, - Sched<[WriteVFDivF_MX_E, ReadVFDivV_MX_E, ReadVFDivF_MX_E, ReadVMask]>; + SchedBinary<"WriteVFDivF", "ReadVFDivV", "ReadVFDivF", m.MX, f.SEW>; } } } multiclass VPseudoVALU_VV_VX { foreach m = MxList in { - defvar mx = m.MX; - defvar WriteVIALUV_MX = !cast("WriteVIALUV_" # mx); - defvar WriteVIALUX_MX = !cast("WriteVIALUV_" # mx); - defvar ReadVIALUV_MX = !cast("ReadVIALUV_" # mx); - defvar ReadVIALUX_MX = !cast("ReadVIALUX_" # mx); - defm "" : VPseudoBinaryV_VV, - Sched<[WriteVIALUV_MX, ReadVIALUV_MX, ReadVIALUV_MX, ReadVMask]>; + SchedBinary<"WriteVIALUV", "ReadVIALUV", "ReadVIALUV", m.MX>; defm "" : VPseudoBinaryV_VX, - Sched<[WriteVIALUX_MX, ReadVIALUV_MX, ReadVIALUX_MX, ReadVMask]>; + SchedBinary<"WriteVIALUX", "ReadVIALUV", "ReadVIALUX", m.MX>; } } multiclass VPseudoVSGNJ_VV_VF { foreach m = MxListF in { - defvar mx = m.MX; - defvar WriteVFSgnjV_MX = !cast("WriteVFSgnjV_" # mx); - defvar ReadVFSgnjV_MX = !cast("ReadVFSgnjV_" # mx); - defm "" : VPseudoBinaryFV_VV, - Sched<[WriteVFSgnjV_MX, ReadVFSgnjV_MX, ReadVFSgnjV_MX, ReadVMask]>; + SchedBinary<"WriteVFSgnjV", "ReadVFSgnjV", "ReadVFSgnjV", m.MX>; } foreach f = FPList in { foreach m = f.MxList in { - defvar mx = m.MX; - defvar WriteVFSgnjF_MX = !cast("WriteVFSgnjF_" # mx); - defvar ReadVFSgnjV_MX = !cast("ReadVFSgnjV_" # mx); - defvar ReadVFSgnjF_MX = !cast("ReadVFSgnjF_" # mx); - defm "" : VPseudoBinaryV_VF, - Sched<[WriteVFSgnjF_MX, ReadVFSgnjV_MX, ReadVFSgnjF_MX, ReadVMask]>; + SchedBinary<"WriteVFSgnjF", "ReadVFSgnjV", "ReadVFSgnjF", m.MX>; } } } multiclass VPseudoVMAX_VV_VF { foreach m = MxListF in { - defvar mx = m.MX; - defvar WriteVFMinMaxV_MX = !cast("WriteVFMinMaxV_" # mx); - defvar ReadVFMinMaxV_MX = !cast("ReadVFMinMaxV_" # mx); - defm "" : VPseudoBinaryFV_VV, - Sched<[WriteVFMinMaxV_MX, ReadVFMinMaxV_MX, ReadVFMinMaxV_MX, ReadVMask]>; + SchedBinary<"WriteVFMinMaxV", "ReadVFMinMaxV", "ReadVFMinMaxV", m.MX>; } foreach f = FPList in { foreach m = f.MxList in { - defvar mx = m.MX; - defvar WriteVFMinMaxF_MX = !cast("WriteVFMinMaxF_" # mx); - defvar ReadVFMinMaxV_MX = !cast("ReadVFMinMaxV_" # mx); - defvar ReadVFMinMaxF_MX = !cast("ReadVFMinMaxF_" # mx); - defm "" : VPseudoBinaryV_VF, - Sched<[WriteVFMinMaxF_MX, ReadVFMinMaxV_MX, ReadVFMinMaxF_MX, ReadVMask]>; + SchedBinary<"WriteVFMinMaxF", "ReadVFMinMaxV", "ReadVFMinMaxF", m.MX>; } } } multiclass VPseudoVALU_VV_VF { foreach m = MxListF in { - defvar mx = m.MX; - defvar WriteVFALUV_MX = !cast("WriteVFALUV_" # mx); - defvar ReadVFALUV_MX = !cast("ReadVFALUV_" # mx); - defm "" : VPseudoBinaryFV_VV, - Sched<[WriteVFALUV_MX, ReadVFALUV_MX, ReadVFALUV_MX, ReadVMask]>; + SchedBinary<"WriteVFALUV", "ReadVFALUV", "ReadVFALUV", m.MX>; } foreach f = FPList in { foreach m = f.MxList in { - defvar mx = m.MX; - defvar WriteVFALUF_MX = !cast("WriteVFALUF_" # mx); - defvar ReadVFALUV_MX = !cast("ReadVFALUV_" # mx); - defvar ReadVFALUF_MX = !cast("ReadVFALUF_" # mx); defm "" : VPseudoBinaryV_VF, - Sched<[WriteVFALUF_MX, ReadVFALUV_MX, ReadVFALUF_MX, ReadVMask]>; + SchedBinary<"WriteVFALUF", "ReadVFALUV", "ReadVFALUF", m.MX>; } } } multiclass VPseudoVALU_VV_VF_RM { foreach m = MxListF in { - defvar mx = m.MX; - defvar WriteVFALUV_MX = !cast("WriteVFALUV_" # mx); - defvar ReadVFALUV_MX = !cast("ReadVFALUV_" # mx); - defm "" : VPseudoBinaryFV_VV_RM, - Sched<[WriteVFALUV_MX, ReadVFALUV_MX, ReadVFALUV_MX, ReadVMask]>; + SchedBinary<"WriteVFALUV", "ReadVFALUV", "ReadVFALUV", m.MX>; } foreach f = FPList in { foreach m = f.MxList in { - defvar mx = m.MX; - defvar WriteVFALUF_MX = !cast("WriteVFALUF_" # mx); - defvar ReadVFALUV_MX = !cast("ReadVFALUV_" # mx); - defvar ReadVFALUF_MX = !cast("ReadVFALUF_" # mx); defm "" : VPseudoBinaryV_VF_RM, - Sched<[WriteVFALUF_MX, ReadVFALUV_MX, ReadVFALUF_MX, ReadVMask]>; + SchedBinary<"WriteVFALUF", "ReadVFALUV", "ReadVFALUF", m.MX>; } } } @@ -2903,13 +2710,8 @@ multiclass VPseudoVALU_VF { foreach f = FPList in { foreach m = f.MxList in { - defvar mx = m.MX; - defvar WriteVFALUF_MX = !cast("WriteVFALUF_" # mx); - defvar ReadVFALUV_MX = !cast("ReadVFALUV_" # mx); - defvar ReadVFALUF_MX = !cast("ReadVFALUF_" # mx); - defm "" : VPseudoBinaryV_VF, - Sched<[WriteVFALUF_MX, ReadVFALUV_MX, ReadVFALUF_MX, ReadVMask]>; + SchedBinary<"WriteVFALUF", "ReadVFALUV", "ReadVFALUF", m.MX>; } } } @@ -2917,13 +2719,8 @@ multiclass VPseudoVALU_VF_RM { foreach f = FPList in { foreach m = f.MxList in { - defvar mx = m.MX; - defvar WriteVFALUF_MX = !cast("WriteVFALUF_" # mx); - defvar ReadVFALUV_MX = !cast("ReadVFALUV_" # mx); - defvar ReadVFALUF_MX = !cast("ReadVFALUF_" # mx); - defm "" : VPseudoBinaryV_VF_RM, - Sched<[WriteVFALUF_MX, ReadVFALUV_MX, ReadVFALUF_MX, ReadVMask]>; + SchedBinary<"WriteVFALUF", "ReadVFALUV", "ReadVFALUF", m.MX>; } } } @@ -2931,67 +2728,43 @@ multiclass VPseudoVALU_VX_VI { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVIALUX_MX = !cast("WriteVIALUX_" # mx); - defvar WriteVIALUI_MX = !cast("WriteVIALUI_" # mx); - defvar ReadVIALUV_MX = !cast("ReadVIALUV_" # mx); - defvar ReadVIALUX_MX = !cast("ReadVIALUX_" # mx); - defm "" : VPseudoBinaryV_VX, - Sched<[WriteVIALUX_MX, ReadVIALUV_MX, ReadVIALUX_MX, ReadVMask]>; + SchedBinary<"WriteVIALUX", "ReadVIALUV", "ReadVIALUX", mx>; defm "" : VPseudoBinaryV_VI, - Sched<[WriteVIALUI_MX, ReadVIALUV_MX, ReadVMask]>; + SchedUnary<"WriteVIALUI", "ReadVIALUV", mx>; } } multiclass VPseudoVWALU_VV_VX { foreach m = MxListW in { defvar mx = m.MX; - defvar WriteVIWALUV_MX = !cast("WriteVIWALUV_" # mx); - defvar WriteVIWALUX_MX = !cast("WriteVIWALUX_" # mx); - defvar ReadVIWALUV_MX = !cast("ReadVIWALUV_" # mx); - defvar ReadVIWALUX_MX = !cast("ReadVIWALUX_" # mx); - defm "" : VPseudoBinaryW_VV, - Sched<[WriteVIWALUV_MX, ReadVIWALUV_MX, ReadVIWALUV_MX, ReadVMask]>; + SchedBinary<"WriteVIWALUV", "ReadVIWALUV", "ReadVIWALUV", mx>; defm "" : VPseudoBinaryW_VX, - Sched<[WriteVIWALUX_MX, ReadVIWALUV_MX, ReadVIWALUX_MX, ReadVMask]>; + SchedBinary<"WriteVIWALUX", "ReadVIWALUV", "ReadVIWALUX", mx>; } } multiclass VPseudoVWMUL_VV_VX { foreach m = MxListW in { defvar mx = m.MX; - defvar WriteVIWMulV_MX = !cast("WriteVIWMulV_" # mx); - defvar WriteVIWMulX_MX = !cast("WriteVIWMulX_" # mx); - defvar ReadVIWMulV_MX = !cast("ReadVIWMulV_" # mx); - defvar ReadVIWMulX_MX = !cast("ReadVIWMulX_" # mx); - defm "" : VPseudoBinaryW_VV, - Sched<[WriteVIWMulV_MX, ReadVIWMulV_MX, ReadVIWMulV_MX, ReadVMask]>; + SchedBinary<"WriteVIWMulV", "ReadVIWMulV", "ReadVIWMulV", mx>; defm "" : VPseudoBinaryW_VX, - Sched<[WriteVIWMulX_MX, ReadVIWMulV_MX, ReadVIWMulX_MX, ReadVMask]>; + SchedBinary<"WriteVIWMulX", "ReadVIWMulV", "ReadVIWMulX", mx>; } } multiclass VPseudoVWMUL_VV_VF_RM { foreach m = MxListFW in { - defvar mx = m.MX; - defvar WriteVFWMulV_MX = !cast("WriteVFWMulV_" # mx); - defvar ReadVFWMulV_MX = !cast("ReadVFWMulV_" # mx); - defm "" : VPseudoBinaryW_VV_RM, - Sched<[WriteVFWMulV_MX, ReadVFWMulV_MX, ReadVFWMulV_MX, ReadVMask]>; + SchedBinary<"WriteVFWMulV", "ReadVFWMulV", "ReadVFWMulV", m.MX>; } foreach f = FPListW in { foreach m = f.MxListFW in { - defvar mx = m.MX; - defvar WriteVFWMulF_MX = !cast("WriteVFWMulF_" # mx); - defvar ReadVFWMulV_MX = !cast("ReadVFWMulV_" # mx); - defvar ReadVFWMulF_MX = !cast("ReadVFWMulF_" # mx); - defm "" : VPseudoBinaryW_VF_RM, - Sched<[WriteVFWMulF_MX, ReadVFWMulV_MX, ReadVFWMulF_MX, ReadVMask]>; + SchedBinary<"WriteVFWMulF", "ReadVFWMulV", "ReadVFWMulF", m.MX>; } } } @@ -2999,59 +2772,36 @@ multiclass VPseudoVWALU_WV_WX { foreach m = MxListW in { defvar mx = m.MX; - defvar WriteVIWALUV_MX = !cast("WriteVIWALUV_" # mx); - defvar WriteVIWALUX_MX = !cast("WriteVIWALUX_" # mx); - defvar ReadVIWALUV_MX = !cast("ReadVIWALUV_" # mx); - defvar ReadVIWALUX_MX = !cast("ReadVIWALUX_" # mx); - defm "" : VPseudoBinaryW_WV, - Sched<[WriteVIWALUV_MX, ReadVIWALUV_MX, ReadVIWALUV_MX, ReadVMask]>; + SchedBinary<"WriteVIWALUV", "ReadVIWALUV", "ReadVIWALUV", mx>; defm "" : VPseudoBinaryW_WX, - Sched<[WriteVIWALUX_MX, ReadVIWALUV_MX, ReadVIWALUX_MX, ReadVMask]>; + SchedBinary<"WriteVIWALUX", "ReadVIWALUV", "ReadVIWALUX", mx>; } } multiclass VPseudoVFWALU_VV_VF_RM { foreach m = MxListFW in { - defvar mx = m.MX; - defvar WriteVFWALUV_MX = !cast("WriteVFWALUV_" # mx); - defvar ReadVFWALUV_MX = !cast("ReadVFWALUV_" # mx); - defm "" : VPseudoBinaryW_VV_RM, - Sched<[WriteVFWALUV_MX, ReadVFWALUV_MX, ReadVFWALUV_MX, ReadVMask]>; + SchedBinary<"WriteVFWALUV", "ReadVFWALUV", "ReadVFWALUV", m.MX>; } foreach f = FPListW in { foreach m = f.MxListFW in { - defvar mx = m.MX; - defvar WriteVFWALUF_MX = !cast("WriteVFWALUF_" # mx); - defvar ReadVFWALUV_MX = !cast("ReadVFWALUV_" # mx); - defvar ReadVFWALUF_MX = !cast("ReadVFWALUF_" # mx); - defm "" : VPseudoBinaryW_VF_RM, - Sched<[WriteVFWALUF_MX, ReadVFWALUV_MX, ReadVFWALUF_MX, ReadVMask]>; + SchedBinary<"WriteVFWALUF", "ReadVFWALUV", "ReadVFWALUF", m.MX>; } } } multiclass VPseudoVFWALU_WV_WF_RM { foreach m = MxListFW in { - defvar mx = m.MX; - defvar WriteVFWALUV_MX = !cast("WriteVFWALUV_" # mx); - defvar ReadVFWALUV_MX = !cast("ReadVFWALUV_" # mx); - defm "" : VPseudoBinaryW_WV_RM, - Sched<[WriteVFWALUV_MX, ReadVFWALUV_MX, ReadVFWALUV_MX, ReadVMask]>; + SchedBinary<"WriteVFWALUV", "ReadVFWALUV", "ReadVFWALUV", m.MX>; } foreach f = FPListW in { foreach m = f.MxListFW in { - defvar mx = m.MX; - defvar WriteVFWALUF_MX = !cast("WriteVFWALUF_" # mx); - defvar ReadVFWALUV_MX = !cast("ReadVFWALUV_" # mx); - defvar ReadVFWALUF_MX = !cast("ReadVFWALUF_" # mx); - defm "" : VPseudoBinaryW_WF_RM, - Sched<[WriteVFWALUF_MX, ReadVFWALUV_MX, ReadVFWALUF_MX, ReadVMask]>; + SchedBinary<"WriteVFWALUF", "ReadVFWALUV", "ReadVFWALUF", m.MX>; } } } @@ -3059,159 +2809,108 @@ multiclass VPseudoVMRG_VM_XM_IM { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVIMergeV_MX = !cast("WriteVIMergeV_" # mx); - defvar WriteVIMergeX_MX = !cast("WriteVIMergeX_" # mx); - defvar WriteVIMergeI_MX = !cast("WriteVIMergeI_" # mx); - defvar ReadVIMergeV_MX = !cast("ReadVIMergeV_" # mx); - defvar ReadVIMergeX_MX = !cast("ReadVIMergeX_" # mx); - def "_VVM" # "_" # m.MX: VPseudoTiedBinaryCarryIn.R, m.vrclass, m.vrclass, m, 1, "">, - Sched<[WriteVIMergeV_MX, ReadVIMergeV_MX, ReadVIMergeV_MX, ReadVMask]>; + SchedBinary<"WriteVIMergeV", "ReadVIMergeV", "ReadVIMergeV", mx>; def "_VXM" # "_" # m.MX: VPseudoTiedBinaryCarryIn.R, m.vrclass, GPR, m, 1, "">, - Sched<[WriteVIMergeX_MX, ReadVIMergeV_MX, ReadVIMergeX_MX, ReadVMask]>; + SchedBinary<"WriteVIMergeX", "ReadVIMergeV", "ReadVIMergeX", mx>; def "_VIM" # "_" # m.MX: VPseudoTiedBinaryCarryIn.R, m.vrclass, simm5, m, 1, "">, - Sched<[WriteVIMergeI_MX, ReadVIMergeV_MX, ReadVMask]>; + SchedUnary<"WriteVIMergeI", "ReadVIMergeV", mx>; } } multiclass VPseudoVCALU_VM_XM_IM { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVICALUV_MX = !cast("WriteVICALUV_" # mx); - defvar WriteVICALUX_MX = !cast("WriteVICALUX_" # mx); - defvar WriteVICALUI_MX = !cast("WriteVICALUI_" # mx); - defvar ReadVICALUV_MX = !cast("ReadVICALUV_" # mx); - defvar ReadVICALUX_MX = !cast("ReadVICALUX_" # mx); - defm "" : VPseudoTiedBinaryV_VM, - Sched<[WriteVICALUV_MX, ReadVICALUV_MX, ReadVICALUV_MX, ReadVMask]>; + SchedBinary<"WriteVICALUV", "ReadVICALUV", "ReadVICALUV", mx>; defm "" : VPseudoTiedBinaryV_XM, - Sched<[WriteVICALUX_MX, ReadVICALUV_MX, ReadVICALUX_MX, ReadVMask]>; + SchedBinary<"WriteVICALUX", "ReadVICALUV", "ReadVICALUX", mx>; defm "" : VPseudoTiedBinaryV_IM, - Sched<[WriteVICALUI_MX, ReadVICALUV_MX, ReadVMask]>; + SchedUnary<"WriteVICALUI", "ReadVICALUV", mx>; } } multiclass VPseudoVCALU_VM_XM { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVICALUV_MX = !cast("WriteVICALUV_" # mx); - defvar WriteVICALUX_MX = !cast("WriteVICALUX_" # mx); - defvar ReadVICALUV_MX = !cast("ReadVICALUV_" # mx); - defvar ReadVICALUX_MX = !cast("ReadVICALUX_" # mx); - defm "" : VPseudoTiedBinaryV_VM, - Sched<[WriteVICALUV_MX, ReadVICALUV_MX, ReadVICALUV_MX, ReadVMask]>; + SchedBinary<"WriteVICALUV", "ReadVICALUV", "ReadVICALUV", mx>; defm "" : VPseudoTiedBinaryV_XM, - Sched<[WriteVICALUX_MX, ReadVICALUV_MX, ReadVICALUX_MX, ReadVMask]>; + SchedBinary<"WriteVICALUX", "ReadVICALUV", "ReadVICALUX", mx>; } } multiclass VPseudoVCALUM_VM_XM_IM { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVICALUV_MX = !cast("WriteVICALUV_" # mx); - defvar WriteVICALUX_MX = !cast("WriteVICALUX_" # mx); - defvar WriteVICALUI_MX = !cast("WriteVICALUI_" # mx); - defvar ReadVICALUV_MX = !cast("ReadVICALUV_" # mx); - defvar ReadVICALUX_MX = !cast("ReadVICALUX_" # mx); - defm "" : VPseudoBinaryV_VM, - Sched<[WriteVICALUV_MX, ReadVICALUV_MX, ReadVICALUV_MX, ReadVMask]>; + SchedBinary<"WriteVICALUV", "ReadVICALUV", "ReadVICALUV", mx, forceMasked=1>; defm "" : VPseudoBinaryV_XM, - Sched<[WriteVICALUX_MX, ReadVICALUV_MX, ReadVICALUX_MX, ReadVMask]>; + SchedBinary<"WriteVICALUX", "ReadVICALUV", "ReadVICALUX", mx, forceMasked=1>; defm "" : VPseudoBinaryV_IM, - Sched<[WriteVICALUI_MX, ReadVICALUV_MX, ReadVMask]>; + SchedUnary<"WriteVICALUI", "ReadVICALUV", mx, forceMasked=1>; } } multiclass VPseudoVCALUM_VM_XM { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVICALUV_MX = !cast("WriteVICALUV_" # mx); - defvar WriteVICALUX_MX = !cast("WriteVICALUX_" # mx); - defvar ReadVICALUV_MX = !cast("ReadVICALUV_" # mx); - defvar ReadVICALUX_MX = !cast("ReadVICALUX_" # mx); - defm "" : VPseudoBinaryV_VM, - Sched<[WriteVICALUV_MX, ReadVICALUV_MX, ReadVICALUV_MX, ReadVMask]>; + SchedBinary<"WriteVICALUV", "ReadVICALUV", "ReadVICALUV", mx, forceMasked=1>; defm "" : VPseudoBinaryV_XM, - Sched<[WriteVICALUX_MX, ReadVICALUV_MX, ReadVICALUX_MX, ReadVMask]>; + SchedBinary<"WriteVICALUX", "ReadVICALUV", "ReadVICALUX", mx, forceMasked=1>; } } multiclass VPseudoVCALUM_V_X_I { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVICALUV_MX = !cast("WriteVICALUV_" # mx); - defvar WriteVICALUX_MX = !cast("WriteVICALUX_" # mx); - defvar WriteVICALUI_MX = !cast("WriteVICALUI_" # mx); - defvar ReadVICALUV_MX = !cast("ReadVICALUV_" # mx); - defvar ReadVICALUX_MX = !cast("ReadVICALUX_" # mx); - defm "" : VPseudoBinaryV_VM, - Sched<[WriteVICALUV_MX, ReadVICALUV_MX, ReadVICALUV_MX]>; + SchedBinary<"WriteVICALUV", "ReadVICALUV", "ReadVICALUV", mx>; defm "" : VPseudoBinaryV_XM, - Sched<[WriteVICALUX_MX, ReadVICALUV_MX, ReadVICALUX_MX]>; + SchedBinary<"WriteVICALUX", "ReadVICALUV", "ReadVICALUX", mx>; defm "" : VPseudoBinaryV_IM, - Sched<[WriteVICALUI_MX, ReadVICALUV_MX]>; + SchedUnary<"WriteVICALUI", "ReadVICALUV", mx>; } } multiclass VPseudoVCALUM_V_X { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVICALUV_MX = !cast("WriteVICALUV_" # mx); - defvar WriteVICALUX_MX = !cast("WriteVICALUX_" # mx); - defvar ReadVICALUV_MX = !cast("ReadVICALUV_" # mx); - defvar ReadVICALUX_MX = !cast("ReadVICALUX_" # mx); - defm "" : VPseudoBinaryV_VM, - Sched<[WriteVICALUV_MX, ReadVICALUV_MX, ReadVICALUV_MX]>; + SchedBinary<"WriteVICALUV", "ReadVICALUV", "ReadVICALUV", mx>; defm "" : VPseudoBinaryV_XM, - Sched<[WriteVICALUX_MX, ReadVICALUV_MX, ReadVICALUX_MX]>; + SchedBinary<"WriteVICALUX", "ReadVICALUV", "ReadVICALUX", mx>; } } multiclass VPseudoVNCLP_WV_WX_WI_RM { foreach m = MxListW in { defvar mx = m.MX; - defvar WriteVNClipV_MX = !cast("WriteVNClipV_" # mx); - defvar WriteVNClipX_MX = !cast("WriteVNClipX_" # mx); - defvar WriteVNClipI_MX = !cast("WriteVNClipI_" # mx); - defvar ReadVNClipV_MX = !cast("ReadVNClipV_" # mx); - defvar ReadVNClipX_MX = !cast("ReadVNClipX_" # mx); - defm "" : VPseudoBinaryV_WV_RM, - Sched<[WriteVNClipV_MX, ReadVNClipV_MX, ReadVNClipV_MX, ReadVMask]>; + SchedBinary<"WriteVNClipV", "ReadVNClipV", "ReadVNClipV", mx>; defm "" : VPseudoBinaryV_WX_RM, - Sched<[WriteVNClipX_MX, ReadVNClipV_MX, ReadVNClipX_MX, ReadVMask]>; + SchedBinary<"WriteVNClipX", "ReadVNClipV", "ReadVNClipX", mx>; defm "" : VPseudoBinaryV_WI_RM, - Sched<[WriteVNClipI_MX, ReadVNClipV_MX, ReadVMask]>; + SchedUnary<"WriteVNClipI", "ReadVNClipV", mx>; } } multiclass VPseudoVNSHT_WV_WX_WI { foreach m = MxListW in { defvar mx = m.MX; - defvar WriteVNShiftV_MX = !cast("WriteVNShiftV_" # mx); - defvar WriteVNShiftX_MX = !cast("WriteVNShiftX_" # mx); - defvar WriteVNShiftI_MX = !cast("WriteVNShiftI_" # mx); - defvar ReadVNShiftV_MX = !cast("ReadVNShiftV_" # mx); - defvar ReadVNShiftX_MX = !cast("ReadVNShiftX_" # mx); - defm "" : VPseudoBinaryV_WV, - Sched<[WriteVNShiftV_MX, ReadVNShiftV_MX, ReadVNShiftV_MX, ReadVMask]>; + SchedBinary<"WriteVNShiftV", "ReadVNShiftV", "ReadVNShiftV", mx>; defm "" : VPseudoBinaryV_WX, - Sched<[WriteVNShiftX_MX, ReadVNShiftV_MX, ReadVNShiftX_MX, ReadVMask]>; + SchedBinary<"WriteVNShiftX", "ReadVNShiftV", "ReadVNShiftX", mx>; defm "" : VPseudoBinaryV_WI, - Sched<[WriteVNShiftI_MX, ReadVNShiftV_MX, ReadVMask]>; + SchedUnary<"WriteVNShiftI", "ReadVNShiftV", mx>; } } @@ -3362,62 +3061,43 @@ multiclass VPseudoVMAC_VV_VX_AAXA { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVIMulAddV_MX = !cast("WriteVIMulAddV_" # mx); - defvar WriteVIMulAddX_MX = !cast("WriteVIMulAddX_" # mx); - defvar ReadVIMulAddV_MX = !cast("ReadVIMulAddV_" # mx); - defvar ReadVIMulAddX_MX = !cast("ReadVIMulAddX_" # mx); - defm "" : VPseudoTernaryV_VV_AAXA, - Sched<[WriteVIMulAddV_MX, ReadVIMulAddV_MX, ReadVIMulAddV_MX, - ReadVIMulAddV_MX, ReadVMask]>; + SchedTernary<"WriteVIMulAddV", "ReadVIMulAddV", "ReadVIMulAddV", + "ReadVIMulAddV", mx>; defm "" : VPseudoTernaryV_VX_AAXA, - Sched<[WriteVIMulAddX_MX, ReadVIMulAddV_MX, ReadVIMulAddV_MX, - ReadVIMulAddX_MX, ReadVMask]>; + SchedTernary<"WriteVIMulAddX", "ReadVIMulAddV", "ReadVIMulAddV", + "ReadVIMulAddX", mx>; } } multiclass VPseudoVMAC_VV_VF_AAXA { foreach m = MxListF in { - defvar mx = m.MX; - defvar WriteVFMulAddV_MX = !cast("WriteVFMulAddV_" # mx); - defvar ReadVFMulAddV_MX = !cast("ReadVFMulAddV_" # mx); - defm "" : VPseudoTernaryV_VV_AAXA, - Sched<[WriteVFMulAddV_MX, ReadVFMulAddV_MX, ReadVFMulAddV_MX, ReadVFMulAddV_MX, ReadVMask]>; + SchedTernary<"WriteVFMulAddV", "ReadVFMulAddV", "ReadVFMulAddV", + "ReadVFMulAddV", m.MX>; } foreach f = FPList in { foreach m = f.MxList in { - defvar mx = m.MX; - defvar WriteVFMulAddF_MX = !cast("WriteVFMulAddF_" # mx); - defvar ReadVFMulAddV_MX = !cast("ReadVFMulAddV_" # mx); - defvar ReadVFMulAddF_MX = !cast("ReadVFMulAddF_" # mx); - defm "" : VPseudoTernaryV_VF_AAXA, - Sched<[WriteVFMulAddF_MX, ReadVFMulAddV_MX, ReadVFMulAddV_MX, ReadVFMulAddF_MX, ReadVMask]>; + SchedTernary<"WriteVFMulAddF", "ReadVFMulAddV", "ReadVFMulAddV", + "ReadVFMulAddF", m.MX>; } } } multiclass VPseudoVMAC_VV_VF_AAXA_RM { foreach m = MxListF in { - defvar mx = m.MX; - defvar WriteVFMulAddV_MX = !cast("WriteVFMulAddV_" # mx); - defvar ReadVFMulAddV_MX = !cast("ReadVFMulAddV_" # mx); - defm "" : VPseudoTernaryV_VV_AAXA_RM, - Sched<[WriteVFMulAddV_MX, ReadVFMulAddV_MX, ReadVFMulAddV_MX, ReadVFMulAddV_MX, ReadVMask]>; + SchedTernary<"WriteVFMulAddV", "ReadVFMulAddV", "ReadVFMulAddV", + "ReadVFMulAddV", m.MX>; } foreach f = FPList in { foreach m = f.MxList in { - defvar mx = m.MX; - defvar WriteVFMulAddF_MX = !cast("WriteVFMulAddF_" # mx); - defvar ReadVFMulAddV_MX = !cast("ReadVFMulAddV_" # mx); - defvar ReadVFMulAddF_MX = !cast("ReadVFMulAddF_" # mx); - defm "" : VPseudoTernaryV_VF_AAXA_RM, - Sched<[WriteVFMulAddF_MX, ReadVFMulAddV_MX, ReadVFMulAddV_MX, ReadVFMulAddF_MX, ReadVMask]>; + SchedTernary<"WriteVFMulAddF", "ReadVFMulAddV", "ReadVFMulAddV", + "ReadVFMulAddF", m.MX>; } } } @@ -3425,70 +3105,46 @@ multiclass VPseudoVSLD_VX_VI { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVISlideX_MX = !cast("WriteVISlideX_" # mx); - defvar WriteVISlideI_MX = !cast("WriteVISlideI_" # mx); - defvar ReadVISlideV_MX = !cast("ReadVISlideV_" # mx); - defvar ReadVISlideX_MX = !cast("ReadVISlideX_" # mx); - defm "" : VPseudoVSLDV_VX, - Sched<[WriteVISlideX_MX, ReadVISlideV_MX, ReadVISlideV_MX, - ReadVISlideX_MX, ReadVMask]>; + SchedTernary<"WriteVISlideX", "ReadVISlideV", "ReadVISlideV", + "ReadVISlideX", mx>; defm "" : VPseudoVSLDV_VI, - Sched<[WriteVISlideI_MX, ReadVISlideV_MX, ReadVISlideV_MX, ReadVMask]>; + SchedBinary<"WriteVISlideI", "ReadVISlideV", "ReadVISlideV", mx>; } } multiclass VPseudoVWMAC_VV_VX { foreach m = MxListW in { defvar mx = m.MX; - defvar WriteVIWMulAddV_MX = !cast("WriteVIWMulAddV_" # mx); - defvar WriteVIWMulAddX_MX = !cast("WriteVIWMulAddX_" # mx); - defvar ReadVIWMulAddV_MX = !cast("ReadVIWMulAddV_" # mx); - defvar ReadVIWMulAddX_MX = !cast("ReadVIWMulAddX_" # mx); - defm "" : VPseudoTernaryW_VV, - Sched<[WriteVIWMulAddV_MX, ReadVIWMulAddV_MX, ReadVIWMulAddV_MX, - ReadVIWMulAddV_MX, ReadVMask]>; + SchedTernary<"WriteVIWMulAddV", "ReadVIWMulAddV", "ReadVIWMulAddV", + "ReadVIWMulAddV", mx>; defm "" : VPseudoTernaryW_VX, - Sched<[WriteVIWMulAddX_MX, ReadVIWMulAddV_MX, ReadVIWMulAddV_MX, - ReadVIWMulAddX_MX, ReadVMask]>; + SchedTernary<"WriteVIWMulAddX", "ReadVIWMulAddV", "ReadVIWMulAddV", + "ReadVIWMulAddX", mx>; } } multiclass VPseudoVWMAC_VX { foreach m = MxListW in { - defvar mx = m.MX; - defvar WriteVIWMulAddX_MX = !cast("WriteVIWMulAddX_" # mx); - defvar ReadVIWMulAddV_MX= !cast("ReadVIWMulAddV_" # mx); - defvar ReadVIWMulAddX_MX = !cast("ReadVIWMulAddX_" # mx); - defm "" : VPseudoTernaryW_VX, - Sched<[WriteVIWMulAddX_MX, ReadVIWMulAddV_MX, ReadVIWMulAddV_MX, - ReadVIWMulAddX_MX, ReadVMask]>; + SchedTernary<"WriteVIWMulAddX", "ReadVIWMulAddV", "ReadVIWMulAddV", + "ReadVIWMulAddX", m.MX>; } } multiclass VPseudoVWMAC_VV_VF_RM { foreach m = MxListFW in { - defvar mx = m.MX; - defvar WriteVFWMulAddV_MX = !cast("WriteVFWMulAddV_" # mx); - defvar ReadVFWMulAddV_MX = !cast("ReadVFWMulAddV_" # mx); - defm "" : VPseudoTernaryW_VV_RM, - Sched<[WriteVFWMulAddV_MX, ReadVFWMulAddV_MX, - ReadVFWMulAddV_MX, ReadVFWMulAddV_MX, ReadVMask]>; + SchedTernary<"WriteVFWMulAddV", "ReadVFWMulAddV", + "ReadVFWMulAddV", "ReadVFWMulAddV", m.MX>; } foreach f = FPListW in { foreach m = f.MxListFW in { - defvar mx = m.MX; - defvar WriteVFWMulAddF_MX = !cast("WriteVFWMulAddF_" # mx); - defvar ReadVFWMulAddV_MX = !cast("ReadVFWMulAddV_" # mx); - defvar ReadVFWMulAddF_MX = !cast("ReadVFWMulAddF_" # mx); - defm "" : VPseudoTernaryW_VF_RM, - Sched<[WriteVFWMulAddF_MX, ReadVFWMulAddV_MX, - ReadVFWMulAddV_MX, ReadVFWMulAddF_MX, ReadVMask]>; + SchedTernary<"WriteVFWMulAddF", "ReadVFWMulAddV", + "ReadVFWMulAddV", "ReadVFWMulAddF", m.MX>; } } } @@ -3496,55 +3152,35 @@ multiclass VPseudoVCMPM_VV_VX_VI { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVICmpV_MX = !cast("WriteVICmpV_" # mx); - defvar WriteVICmpX_MX = !cast("WriteVICmpX_" # mx); - defvar WriteVICmpI_MX = !cast("WriteVICmpI_" # mx); - defvar ReadVICmpV_MX = !cast("ReadVICmpV_" # mx); - defvar ReadVICmpX_MX = !cast("ReadVICmpX_" # mx); - defm "" : VPseudoBinaryM_VV, - Sched<[WriteVICmpV_MX, ReadVICmpV_MX, ReadVICmpV_MX, ReadVMask]>; + SchedBinary<"WriteVICmpV", "ReadVICmpV", "ReadVICmpV", mx>; defm "" : VPseudoBinaryM_VX, - Sched<[WriteVICmpX_MX, ReadVICmpV_MX, ReadVICmpX_MX, ReadVMask]>; + SchedBinary<"WriteVICmpX", "ReadVICmpV", "ReadVICmpX", mx>; defm "" : VPseudoBinaryM_VI, - Sched<[WriteVICmpI_MX, ReadVICmpV_MX, ReadVMask]>; + SchedUnary<"WriteVICmpI", "ReadVICmpV", mx>; } } multiclass VPseudoVCMPM_VV_VX { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVICmpV_MX = !cast("WriteVICmpV_" # mx); - defvar WriteVICmpX_MX = !cast("WriteVICmpX_" # mx); - defvar ReadVICmpV_MX = !cast("ReadVICmpV_" # mx); - defvar ReadVICmpX_MX = !cast("ReadVICmpX_" # mx); - defm "" : VPseudoBinaryM_VV, - Sched<[WriteVICmpV_MX, ReadVICmpV_MX, ReadVICmpV_MX, ReadVMask]>; + SchedBinary<"WriteVICmpV", "ReadVICmpV", "ReadVICmpV", mx>; defm "" : VPseudoBinaryM_VX, - Sched<[WriteVICmpX_MX, ReadVICmpV_MX, ReadVICmpX_MX, ReadVMask]>; + SchedBinary<"WriteVICmpX", "ReadVICmpV", "ReadVICmpX", mx>; } } multiclass VPseudoVCMPM_VV_VF { foreach m = MxListF in { - defvar mx = m.MX; - defvar WriteVFCmpV_MX = !cast("WriteVFCmpV_" # mx); - defvar ReadVFCmpV_MX = !cast("ReadVFCmpV_" # mx); - defm "" : VPseudoBinaryM_VV, - Sched<[WriteVFCmpV_MX, ReadVFCmpV_MX, ReadVFCmpV_MX, ReadVMask]>; + SchedBinary<"WriteVFCmpV", "ReadVFCmpV", "ReadVFCmpV", m.MX>; } foreach f = FPList in { foreach m = f.MxList in { - defvar mx = m.MX; - defvar WriteVFCmpF_MX = !cast("WriteVFCmpF_" # mx); - defvar ReadVFCmpV_MX = !cast("ReadVFCmpV_" # mx); - defvar ReadVFCmpF_MX = !cast("ReadVFCmpF_" # mx); - defm "" : VPseudoBinaryM_VF, - Sched<[WriteVFCmpF_MX, ReadVFCmpV_MX, ReadVFCmpF_MX, ReadVMask]>; + SchedBinary<"WriteVFCmpF", "ReadVFCmpV", "ReadVFCmpF", m.MX>; } } } @@ -3552,13 +3188,8 @@ multiclass VPseudoVCMPM_VF { foreach f = FPList in { foreach m = f.MxList in { - defvar mx = m.MX; - defvar WriteVFCmpF_MX = !cast("WriteVFCmpF_" # mx); - defvar ReadVFCmpV_MX = !cast("ReadVFCmpV_" # mx); - defvar ReadVFCmpF_MX = !cast("ReadVFCmpF_" # mx); - defm "" : VPseudoBinaryM_VF, - Sched<[WriteVFCmpF_MX, ReadVFCmpV_MX, ReadVFCmpF_MX, ReadVMask]>; + SchedBinary<"WriteVFCmpF", "ReadVFCmpV", "ReadVFCmpF", m.MX>; } } } @@ -3566,15 +3197,10 @@ multiclass VPseudoVCMPM_VX_VI { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVICmpX_MX = !cast("WriteVICmpX_" # mx); - defvar WriteVICmpI_MX = !cast("WriteVICmpI_" # mx); - defvar ReadVICmpV_MX = !cast("ReadVICmpV_" # mx); - defvar ReadVICmpX_MX = !cast("ReadVICmpX_" # mx); - defm "" : VPseudoBinaryM_VX, - Sched<[WriteVICmpX_MX, ReadVICmpV_MX, ReadVICmpX_MX, ReadVMask]>; + SchedBinary<"WriteVICmpX", "ReadVICmpV", "ReadVICmpX", mx>; defm "" : VPseudoBinaryM_VI, - Sched<[WriteVICmpI_MX, ReadVICmpV_MX, ReadVMask]>; + SchedUnary<"WriteVICmpI", "ReadVICmpV", mx>; } } @@ -3582,10 +3208,8 @@ foreach m = MxList in { defvar mx = m.MX; foreach e = SchedSEWSet.val in { - defvar WriteVIRedV_From_MX_E = !cast("WriteVIRedV_From_" # mx # "_E" # e); defm _VS : VPseudoTernaryWithTailPolicy, - Sched<[WriteVIRedV_From_MX_E, ReadVIRedV, ReadVIRedV, ReadVIRedV, - ReadVMask]>; + SchedReduction<"WriteVIRedV_From", "ReadVIRedV", mx, e>; } } } @@ -3594,10 +3218,8 @@ foreach m = MxList in { defvar mx = m.MX; foreach e = SchedSEWSet.val in { - defvar WriteVIRedMinMaxV_From_MX_E = !cast("WriteVIRedMinMaxV_From_" # mx # "_E" # e); defm _VS : VPseudoTernaryWithTailPolicy, - Sched<[WriteVIRedMinMaxV_From_MX_E, ReadVIRedV, ReadVIRedV, - ReadVIRedV, ReadVMask]>; + SchedReduction<"WriteVIRedMinMaxV_From", "ReadVIRedV", mx, e>; } } } @@ -3606,10 +3228,8 @@ foreach m = MxListWRed in { defvar mx = m.MX; foreach e = SchedSEWSet.val in { - defvar WriteVIWRedV_From_MX_E = !cast("WriteVIWRedV_From_" # mx # "_E" # e); defm _VS : VPseudoTernaryWithTailPolicy, - Sched<[WriteVIWRedV_From_MX_E, ReadVIWRedV, ReadVIWRedV, - ReadVIWRedV, ReadVMask]>; + SchedReduction<"WriteVIWRedV_From", "ReadVIWRedV", mx, e>; } } } @@ -3618,12 +3238,10 @@ foreach m = MxListF in { defvar mx = m.MX; foreach e = SchedSEWSet.val in { - defvar WriteVFRedV_From_MX_E = !cast("WriteVFRedV_From_" # mx # "_E" # e); defm _VS : VPseudoTernaryWithTailPolicyRoundingMode, - Sched<[WriteVFRedV_From_MX_E, ReadVFRedV, ReadVFRedV, ReadVFRedV, - ReadVMask]>; + SchedReduction<"WriteVFRedV_From", "ReadVFRedV", mx, e>; } } } @@ -3632,10 +3250,8 @@ foreach m = MxListF in { defvar mx = m.MX; foreach e = SchedSEWSet.val in { - defvar WriteVFRedMinMaxV_From_MX_E = !cast("WriteVFRedMinMaxV_From_" # mx # "_E" # e); defm _VS : VPseudoTernaryWithTailPolicy, - Sched<[WriteVFRedMinMaxV_From_MX_E, ReadVFRedV, ReadVFRedV, ReadVFRedV, - ReadVMask]>; + SchedReduction<"WriteVFRedMinMaxV_From", "ReadVFRedV", mx, e>; } } } @@ -3644,11 +3260,9 @@ foreach m = MxListF in { defvar mx = m.MX; foreach e = SchedSEWSet.val in { - defvar WriteVFRedOV_From_MX_E = !cast("WriteVFRedOV_From_" # mx # "_E" # e); defm _VS : VPseudoTernaryWithTailPolicyRoundingMode, - Sched<[WriteVFRedOV_From_MX_E, ReadVFRedOV, ReadVFRedOV, - ReadVFRedOV, ReadVMask]>; + SchedReduction<"WriteVFRedOV_From", "ReadVFRedOV", mx, e>; } } } @@ -3657,12 +3271,10 @@ foreach m = MxListFWRed in { defvar mx = m.MX; foreach e = SchedSEWSet.val in { - defvar WriteVFWRedV_From_MX_E = !cast("WriteVFWRedV_From_" # mx # "_E" # e); defm _VS : VPseudoTernaryWithTailPolicyRoundingMode, - Sched<[WriteVFWRedV_From_MX_E, ReadVFWRedV, ReadVFWRedV, - ReadVFWRedV, ReadVMask]>; + SchedReduction<"WriteVFWRedV_From", "ReadVFWRedV", mx, e>; } } } @@ -3716,211 +3328,139 @@ multiclass VPseudoVCVTI_V { foreach m = MxListF in { - defvar mx = m.MX; - defvar WriteVFCvtFToIV_MX = !cast("WriteVFCvtFToIV_" # mx); - defvar ReadVFCvtFToIV_MX = !cast("ReadVFCvtFToIV_" # mx); - defm _V : VPseudoConversion, - Sched<[WriteVFCvtFToIV_MX, ReadVFCvtFToIV_MX, ReadVMask]>; + SchedUnary<"WriteVFCvtFToIV", "ReadVFCvtFToIV", m.MX>; } } multiclass VPseudoVCVTI_V_RM { foreach m = MxListF in { - defvar mx = m.MX; - defvar WriteVFCvtFToIV_MX = !cast("WriteVFCvtFToIV_" # mx); - defvar ReadVFCvtFToIV_MX = !cast("ReadVFCvtFToIV_" # mx); - defm _V : VPseudoConversionRoundingMode, - Sched<[WriteVFCvtFToIV_MX, ReadVFCvtFToIV_MX, ReadVMask]>; + SchedUnary<"WriteVFCvtFToIV", "ReadVFCvtFToIV", m.MX>; } } multiclass VPseudoVCVTI_RM_V { foreach m = MxListF in { - defvar mx = m.MX; - defvar WriteVFCvtFToIV_MX = !cast("WriteVFCvtFToIV_" # mx); - defvar ReadVFCvtFToIV_MX = !cast("ReadVFCvtFToIV_" # mx); - defm _V : VPseudoConversionRM, - Sched<[WriteVFCvtFToIV_MX, ReadVFCvtFToIV_MX, ReadVMask]>; + SchedUnary<"WriteVFCvtFToIV", "ReadVFCvtFToIV", m.MX>; } } multiclass VPseudoVFROUND_NOEXCEPT_V { foreach m = MxListF in { - defvar mx = m.MX; - defvar WriteVFCvtFToIV_MX = !cast("WriteVFCvtFToIV_" # mx); - defvar ReadVFCvtFToIV_MX = !cast("ReadVFCvtFToIV_" # mx); - defm _V : VPseudoConversionNoExcept, - Sched<[WriteVFCvtFToIV_MX, ReadVFCvtFToIV_MX, ReadVMask]>; + SchedUnary<"WriteVFCvtFToIV", "ReadVFCvtFToIV", m.MX>; } } multiclass VPseudoVCVTF_V_RM { foreach m = MxListF in { - defvar mx = m.MX; - defvar WriteVFCvtIToFV_MX = !cast("WriteVFCvtIToFV_" # mx); - defvar ReadVFCvtIToFV_MX = !cast("ReadVFCvtIToFV_" # mx); - defm _V : VPseudoConversionRoundingMode, - Sched<[WriteVFCvtIToFV_MX, ReadVFCvtIToFV_MX, ReadVMask]>; + SchedUnary<"WriteVFCvtIToFV", "ReadVFCvtIToFV", m.MX>; } } multiclass VPseudoVCVTF_RM_V { foreach m = MxListF in { - defvar mx = m.MX; - defvar WriteVFCvtIToFV_MX = !cast("WriteVFCvtIToFV_" # mx); - defvar ReadVFCvtIToFV_MX = !cast("ReadVFCvtIToFV_" # mx); - defm _V : VPseudoConversionRM, - Sched<[WriteVFCvtIToFV_MX, ReadVFCvtIToFV_MX, ReadVMask]>; + SchedUnary<"WriteVFCvtIToFV", "ReadVFCvtIToFV", m.MX>; } } multiclass VPseudoVWCVTI_V { defvar constraint = "@earlyclobber $rd"; foreach m = MxListFW in { - defvar mx = m.MX; - defvar WriteVFWCvtFToIV_MX = !cast("WriteVFWCvtFToIV_" # mx); - defvar ReadVFWCvtFToIV_MX = !cast("ReadVFWCvtFToIV_" # mx); - defm _V : VPseudoConversion, - Sched<[WriteVFWCvtFToIV_MX, ReadVFWCvtFToIV_MX, ReadVMask]>; + SchedUnary<"WriteVFWCvtFToIV", "ReadVFWCvtFToIV", m.MX>; } } multiclass VPseudoVWCVTI_V_RM { defvar constraint = "@earlyclobber $rd"; foreach m = MxListFW in { - defvar mx = m.MX; - defvar WriteVFWCvtFToIV_MX = !cast("WriteVFWCvtFToIV_" # mx); - defvar ReadVFWCvtFToIV_MX = !cast("ReadVFWCvtFToIV_" # mx); - defm _V : VPseudoConversionRoundingMode, - Sched<[WriteVFWCvtFToIV_MX, ReadVFWCvtFToIV_MX, ReadVMask]>; + SchedUnary<"WriteVFWCvtFToIV", "ReadVFWCvtFToIV", m.MX>; } } multiclass VPseudoVWCVTI_RM_V { defvar constraint = "@earlyclobber $rd"; foreach m = MxListFW in { - defvar mx = m.MX; - defvar WriteVFWCvtFToIV_MX = !cast("WriteVFWCvtFToIV_" # mx); - defvar ReadVFWCvtFToIV_MX = !cast("ReadVFWCvtFToIV_" # mx); - defm _V : VPseudoConversionRM, - Sched<[WriteVFWCvtFToIV_MX, ReadVFWCvtFToIV_MX, ReadVMask]>; + SchedUnary<"WriteVFWCvtFToIV", "ReadVFWCvtFToIV", m.MX>; } } multiclass VPseudoVWCVTF_V { defvar constraint = "@earlyclobber $rd"; foreach m = MxListW in { - defvar mx = m.MX; - defvar WriteVFWCvtIToFV_MX = !cast("WriteVFWCvtIToFV_" # mx); - defvar ReadVFWCvtIToFV_MX = !cast("ReadVFWCvtIToFV_" # mx); - defm _V : VPseudoConversion, - Sched<[WriteVFWCvtIToFV_MX, ReadVFWCvtIToFV_MX, ReadVMask]>; + SchedUnary<"WriteVFWCvtIToFV", "ReadVFWCvtIToFV", m.MX>; } } multiclass VPseudoVWCVTD_V { defvar constraint = "@earlyclobber $rd"; foreach m = MxListFW in { - defvar mx = m.MX; - defvar WriteVFWCvtFToFV_MX = !cast("WriteVFWCvtFToFV_" # mx); - defvar ReadVFWCvtFToFV_MX = !cast("ReadVFWCvtFToFV_" # mx); - defm _V : VPseudoConversion, - Sched<[WriteVFWCvtFToFV_MX, ReadVFWCvtFToFV_MX, ReadVMask]>; + SchedUnary<"WriteVFWCvtFToFV", "ReadVFWCvtFToFV", m.MX>; } } multiclass VPseudoVNCVTI_W { defvar constraint = "@earlyclobber $rd"; foreach m = MxListW in { - defvar mx = m.MX; - defvar WriteVFNCvtFToIV_MX = !cast("WriteVFNCvtFToIV_" # mx); - defvar ReadVFNCvtFToIV_MX = !cast("ReadVFNCvtFToIV_" # mx); - defm _W : VPseudoConversion, - Sched<[WriteVFNCvtFToIV_MX, ReadVFNCvtFToIV_MX, ReadVMask]>; + SchedUnary<"WriteVFNCvtFToIV", "ReadVFNCvtFToIV", m.MX>; } } multiclass VPseudoVNCVTI_W_RM { defvar constraint = "@earlyclobber $rd"; foreach m = MxListW in { - defvar mx = m.MX; - defvar WriteVFNCvtFToIV_MX = !cast("WriteVFNCvtFToIV_" # mx); - defvar ReadVFNCvtFToIV_MX = !cast("ReadVFNCvtFToIV_" # mx); - defm _W : VPseudoConversionRoundingMode, - Sched<[WriteVFNCvtFToIV_MX, ReadVFNCvtFToIV_MX, ReadVMask]>; + SchedUnary<"WriteVFNCvtFToIV", "ReadVFNCvtFToIV", m.MX>; } } multiclass VPseudoVNCVTI_RM_W { defvar constraint = "@earlyclobber $rd"; foreach m = MxListW in { - defvar mx = m.MX; - defvar WriteVFNCvtFToIV_MX = !cast("WriteVFNCvtFToIV_" # mx); - defvar ReadVFNCvtFToIV_MX = !cast("ReadVFNCvtFToIV_" # mx); - defm _W : VPseudoConversionRM, - Sched<[WriteVFNCvtFToIV_MX, ReadVFNCvtFToIV_MX, ReadVMask]>; + SchedUnary<"WriteVFNCvtFToIV", "ReadVFNCvtFToIV", m.MX>; } } multiclass VPseudoVNCVTF_W_RM { defvar constraint = "@earlyclobber $rd"; foreach m = MxListFW in { - defvar mx = m.MX; - defvar WriteVFNCvtIToFV_MX = !cast("WriteVFNCvtIToFV_" # mx); - defvar ReadVFNCvtIToFV_MX = !cast("ReadVFNCvtIToFV_" # mx); - defm _W : VPseudoConversionRoundingMode, - Sched<[WriteVFNCvtIToFV_MX, ReadVFNCvtIToFV_MX, ReadVMask]>; + SchedUnary<"WriteVFNCvtIToFV", "ReadVFNCvtIToFV", m.MX>; } } multiclass VPseudoVNCVTF_RM_W { defvar constraint = "@earlyclobber $rd"; foreach m = MxListFW in { - defvar mx = m.MX; - defvar WriteVFNCvtIToFV_MX = !cast("WriteVFNCvtIToFV_" # mx); - defvar ReadVFNCvtIToFV_MX = !cast("ReadVFNCvtIToFV_" # mx); - defm _W : VPseudoConversionRM, - Sched<[WriteVFNCvtIToFV_MX, ReadVFNCvtIToFV_MX, ReadVMask]>; + SchedUnary<"WriteVFNCvtIToFV", "ReadVFNCvtIToFV", m.MX>; } } multiclass VPseudoVNCVTD_W { defvar constraint = "@earlyclobber $rd"; foreach m = MxListFW in { - defvar mx = m.MX; - defvar WriteVFNCvtFToFV_MX = !cast("WriteVFNCvtFToFV_" # mx); - defvar ReadVFNCvtFToFV_MX = !cast("ReadVFNCvtFToFV_" # mx); - defm _W : VPseudoConversion, - Sched<[WriteVFNCvtFToFV_MX, ReadVFNCvtFToFV_MX, ReadVMask]>; + SchedUnary<"WriteVFNCvtFToFV", "ReadVFNCvtFToFV", m.MX>; } } multiclass VPseudoVNCVTD_W_RM { defvar constraint = "@earlyclobber $rd"; foreach m = MxListFW in { - defvar mx = m.MX; - defvar WriteVFNCvtFToFV_MX = !cast("WriteVFNCvtFToFV_" # mx); - defvar ReadVFNCvtFToFV_MX = !cast("ReadVFNCvtFToFV_" # mx); - defm _W : VPseudoConversionRoundingMode, - Sched<[WriteVFNCvtFToFV_MX, ReadVFNCvtFToFV_MX, ReadVMask]>; + SchedUnary<"WriteVFNCvtFToFV", "ReadVFNCvtFToFV", m.MX>; } }