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 @@ -140,17 +140,17 @@ !eq(eew, 64) : [V_M1, V_M2, V_M4, V_M8]); } -class FPR_Info mxlist, - list mxlistfw> { - RegisterClass fprclass = regclass; - string FX = fx; - list MxList = mxlist; - list MxListFW = mxlistfw; +class FPR_Info { + RegisterClass fprclass = !cast("FPR" # sew); + string FX = "F" # sew; + int SEW = sew; + list MxList = MxSet.m; + list MxListFW = !if(!eq(sew, 64), [], !listremove(MxList, [V_M8])); } -def SCALAR_F16 : FPR_Info.m, [V_MF4, V_MF2, V_M1, V_M2, V_M4]>; -def SCALAR_F32 : FPR_Info.m, [V_MF2, V_M1, V_M2, V_M4]>; -def SCALAR_F64 : FPR_Info.m, []>; +def SCALAR_F16 : FPR_Info<16>; +def SCALAR_F32 : FPR_Info<32>; +def SCALAR_F64 : FPR_Info<64>; defvar FPList = [SCALAR_F16, SCALAR_F32, SCALAR_F64]; @@ -2677,15 +2677,12 @@ foreach f = FPList in { foreach m = f.MxList in { defvar mx = m.MX; - defvar sews = SchedSEWSet.val; - foreach e = sews in { - defvar WriteVFDivF_MX_E = !cast("WriteVFDivF_" # mx # "_E" # e); - defvar ReadVFDivV_MX_E = !cast("ReadVFDivV_" # mx # "_E" # e); - defvar ReadVFDivF_MX_E = !cast("ReadVFDivF_" # mx # "_E" # e); + 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, - Sched<[WriteVFDivF_MX_E, ReadVFDivV_MX_E, ReadVFDivF_MX_E, ReadVMask]>; - } + defm "" : VPseudoBinaryV_VF, + Sched<[WriteVFDivF_MX_E, ReadVFDivV_MX_E, ReadVFDivF_MX_E, ReadVMask]>; } } } @@ -2694,15 +2691,12 @@ foreach f = FPList in { foreach m = f.MxList in { defvar mx = m.MX; - defvar sews = SchedSEWSet.val; - foreach e = sews in { - defvar WriteVFDivF_MX_E = !cast("WriteVFDivF_" # mx # "_E" # e); - defvar ReadVFDivV_MX_E = !cast("ReadVFDivV_" # mx # "_E" # e); - defvar ReadVFDivF_MX_E = !cast("ReadVFDivF_" # mx # "_E" # e); + 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, - Sched<[WriteVFDivF_MX_E, ReadVFDivV_MX_E, ReadVFDivF_MX_E, ReadVMask]>; - } + defm "" : VPseudoBinaryV_VF, + Sched<[WriteVFDivF_MX_E, ReadVFDivV_MX_E, ReadVFDivF_MX_E, ReadVMask]>; } } }