diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoV.td b/llvm/lib/Target/RISCV/RISCVInstrInfoV.td index ed7e6472209d0..0414a4185fe45 100644 --- a/llvm/lib/Target/RISCV/RISCVInstrInfoV.td +++ b/llvm/lib/Target/RISCV/RISCVInstrInfoV.td @@ -442,36 +442,37 @@ multiclass VIndexLoadStore EEWList> { } } -multiclass VALU_IV_V_X_I funct6> { +multiclass VALU_IV_V funct6> { def V : VALUVV, Sched<[WriteVIALUV_WorstCase, ReadVIALUV_WorstCase, ReadVIALUV_WorstCase, ReadVMask]>; - def X : VALUVX, - Sched<[WriteVIALUX_WorstCase, ReadVIALUV_WorstCase, - ReadVIALUX_WorstCase, ReadVMask]>; - def I : VALUVI, - Sched<[WriteVIALUI_WorstCase, ReadVIALUV_WorstCase, - ReadVMask]>; } -multiclass VALU_IV_V_X funct6> { - def V : VALUVV, - Sched<[WriteVIALUV_WorstCase, ReadVIALUV_WorstCase, - ReadVIALUV_WorstCase, ReadVMask]>; +multiclass VALU_IV_X funct6> { def X : VALUVX, Sched<[WriteVIALUX_WorstCase, ReadVIALUV_WorstCase, ReadVIALUX_WorstCase, ReadVMask]>; } -multiclass VALU_IV_X_I funct6> { - def X : VALUVX, - Sched<[WriteVIALUX_WorstCase, ReadVIALUV_WorstCase, - ReadVIALUX_WorstCase, ReadVMask]>; +multiclass VALU_IV_I funct6> { def I : VALUVI, Sched<[WriteVIALUI_WorstCase, ReadVIALUV_WorstCase, ReadVMask]>; } +multiclass VALU_IV_V_X_I funct6> + : VALU_IV_V, + VALU_IV_X, + VALU_IV_I; + +multiclass VALU_IV_V_X funct6> + : VALU_IV_V, + VALU_IV_X; + +multiclass VALU_IV_X_I funct6> + : VALU_IV_X, + VALU_IV_I; + multiclass VALU_MV_V_X funct6, string vw> { def V : VALUVV, Sched<[WriteVIWALUV_WorstCase, ReadVIWALUV_WorstCase, @@ -490,19 +491,17 @@ multiclass VMAC_MV_V_X funct6> { ReadVIMulAddX_WorstCase, ReadVMask]>; } -multiclass VWMAC_MV_V_X funct6> { - def V : VALUrVV, - Sched<[WriteVIWMulAddV_WorstCase, ReadVIWMulAddV_WorstCase, - ReadVIWMulAddV_WorstCase, ReadVMask]>; +multiclass VWMAC_MV_X funct6> { def X : VALUrVX, Sched<[WriteVIWMulAddX_WorstCase, ReadVIWMulAddV_WorstCase, ReadVIWMulAddX_WorstCase, ReadVMask]>; } -multiclass VWMAC_MV_X funct6> { - def X : VALUrVX, - Sched<[WriteVIWMulAddX_WorstCase, ReadVIWMulAddV_WorstCase, - ReadVIWMulAddX_WorstCase, ReadVMask]>; +multiclass VWMAC_MV_V_X funct6> + : VWMAC_MV_X { + def V : VALUrVV, + Sched<[WriteVIWMulAddV_WorstCase, ReadVIWMulAddV_WorstCase, + ReadVIWMulAddV_WorstCase, ReadVMask]>; } multiclass VALU_MV_VS2 funct6, bits<5> vs1> { @@ -510,18 +509,6 @@ multiclass VALU_MV_VS2 funct6, bits<5> vs1> { Sched<[WriteVExtV_WorstCase, ReadVExtV_WorstCase, ReadVMask]>; } -multiclass VALUm_IV_V_X_I funct6> { - def VM : VALUmVV, - Sched<[WriteVICALUV_WorstCase, ReadVICALUV_WorstCase, - ReadVICALUV_WorstCase, ReadVMask]>; - def XM : VALUmVX, - Sched<[WriteVICALUX_WorstCase, ReadVICALUV_WorstCase, - ReadVICALUX_WorstCase, ReadVMask]>; - def IM : VALUmVI, - Sched<[WriteVICALUI_WorstCase, ReadVICALUV_WorstCase, - ReadVMask]>; -} - multiclass VMRG_IV_V_X_I funct6> { def VM : VALUmVV, Sched<[WriteVIMergeV_WorstCase, ReadVIMergeV_WorstCase, @@ -543,15 +530,11 @@ multiclass VALUm_IV_V_X funct6> { ReadVICALUX_WorstCase, ReadVMask]>; } -multiclass VALUNoVm_IV_V_X_I funct6> { - def V : VALUVVNoVm, - Sched<[WriteVICALUV_WorstCase, ReadVICALUV_WorstCase, - ReadVICALUV_WorstCase]>; - def X : VALUVXNoVm, - Sched<[WriteVICALUX_WorstCase, ReadVICALUV_WorstCase, - ReadVICALUX_WorstCase]>; - def I : VALUVINoVm, - Sched<[WriteVICALUI_WorstCase, ReadVICALUV_WorstCase]>; +multiclass VALUm_IV_V_X_I funct6> + : VALUm_IV_V_X { + def IM : VALUmVI, + Sched<[WriteVICALUI_WorstCase, ReadVICALUV_WorstCase, + ReadVMask]>; } multiclass VALUNoVm_IV_V_X funct6> { @@ -563,13 +546,10 @@ multiclass VALUNoVm_IV_V_X funct6> { ReadVICALUX_WorstCase]>; } -multiclass VALU_FV_V_F funct6> { - def V : VALUVV, - Sched<[WriteVFALUV_WorstCase, ReadVFALUV_WorstCase, - ReadVFALUV_WorstCase, ReadVMask]>; - def F : VALUVF, - Sched<[WriteVFALUF_WorstCase, ReadVFALUV_WorstCase, - ReadVFALUF_WorstCase, ReadVMask]>; +multiclass VALUNoVm_IV_V_X_I funct6> + : VALUNoVm_IV_V_X { + def I : VALUVINoVm, + Sched<[WriteVICALUI_WorstCase, ReadVICALUV_WorstCase]>; } multiclass VALU_FV_F funct6> { @@ -578,6 +558,13 @@ multiclass VALU_FV_F funct6> { ReadVFALUF_WorstCase, ReadVMask]>; } +multiclass VALU_FV_V_F funct6> + : VALU_FV_F { + def V : VALUVV, + Sched<[WriteVFALUV_WorstCase, ReadVFALUV_WorstCase, + ReadVFALUV_WorstCase, ReadVMask]>; +} + multiclass VWALU_FV_V_F funct6, string vw> { def V : VALUVV, Sched<[WriteVFWALUV_WorstCase, ReadVFWALUV_WorstCase, @@ -596,19 +583,17 @@ multiclass VMUL_FV_V_F funct6> { ReadVFMulF_WorstCase, ReadVMask]>; } -multiclass VDIV_FV_V_F funct6> { - def V : VALUVV, - Sched<[WriteVFDivV_WorstCase, ReadVFDivV_WorstCase, - ReadVFDivV_WorstCase, ReadVMask]>; +multiclass VDIV_FV_F funct6> { def F : VALUVF, Sched<[WriteVFDivF_WorstCase, ReadVFDivV_WorstCase, ReadVFDivF_WorstCase, ReadVMask]>; } -multiclass VRDIV_FV_F funct6> { - def F : VALUVF, - Sched<[WriteVFDivF_WorstCase, ReadVFDivV_WorstCase, - ReadVFDivF_WorstCase, ReadVMask]>; +multiclass VDIV_FV_V_F funct6> + : VDIV_FV_F { + def V : VALUVV, + Sched<[WriteVFDivV_WorstCase, ReadVFDivV_WorstCase, + ReadVFDivV_WorstCase, ReadVMask]>; } multiclass VWMUL_FV_V_F funct6> { @@ -659,19 +644,17 @@ multiclass VMINMAX_FV_V_F funct6> { ReadVFMinMaxF_WorstCase, ReadVMask]>; } -multiclass VCMP_FV_V_F funct6> { - def V : VALUVV, - Sched<[WriteVFCmpV_WorstCase, ReadVFCmpV_WorstCase, - ReadVFCmpV_WorstCase, ReadVMask]>; +multiclass VCMP_FV_F funct6> { def F : VALUVF, Sched<[WriteVFCmpF_WorstCase, ReadVFCmpV_WorstCase, ReadVFCmpF_WorstCase, ReadVMask]>; } -multiclass VCMP_FV_F funct6> { - def F : VALUVF, - Sched<[WriteVFCmpF_WorstCase, ReadVFCmpV_WorstCase, - ReadVFCmpF_WorstCase, ReadVMask]>; +multiclass VCMP_FV_V_F funct6> + : VCMP_FV_F { + def V : VALUVV, + Sched<[WriteVFCmpV_WorstCase, ReadVFCmpV_WorstCase, + ReadVFCmpV_WorstCase, ReadVMask]>; } multiclass VSGNJ_FV_V_F funct6> { @@ -822,35 +805,36 @@ multiclass VMINMAX_IV_V_X funct6> { ReadVIMinMaxX_WorstCase, ReadVMask]>; } -multiclass VCMP_IV_V_X_I funct6> { +multiclass VCMP_IV_V funct6> { def V : VALUVV, Sched<[WriteVICmpV_WorstCase, ReadVICmpV_WorstCase, ReadVICmpV_WorstCase, ReadVMask]>; - def X : VALUVX, - Sched<[WriteVICmpX_WorstCase, ReadVICmpV_WorstCase, - ReadVICmpX_WorstCase, ReadVMask]>; - def I : VALUVI, - Sched<[WriteVICmpI_WorstCase, ReadVICmpV_WorstCase, - ReadVMask]>; } -multiclass VCMP_IV_X_I funct6> { +multiclass VCMP_IV_X funct6> { def X : VALUVX, Sched<[WriteVICmpX_WorstCase, ReadVICmpV_WorstCase, ReadVICmpX_WorstCase, ReadVMask]>; +} + +multiclass VCMP_IV_I funct6> { def I : VALUVI, Sched<[WriteVICmpI_WorstCase, ReadVICmpV_WorstCase, ReadVMask]>; } -multiclass VCMP_IV_V_X funct6> { - def V : VALUVV, - Sched<[WriteVICmpV_WorstCase, ReadVICmpV_WorstCase, - ReadVICmpV_WorstCase, ReadVMask]>; - def X : VALUVX, - Sched<[WriteVICmpX_WorstCase, ReadVICmpV_WorstCase, - ReadVICmpX_WorstCase, ReadVMask]>; -} +multiclass VCMP_IV_V_X_I funct6> + : VCMP_IV_V, + VCMP_IV_X, + VCMP_IV_I; + +multiclass VCMP_IV_X_I funct6> + : VCMP_IV_X, + VCMP_IV_I; + +multiclass VCMP_IV_V_X funct6> + : VCMP_IV_V, + VCMP_IV_X; multiclass VMUL_MV_V_X funct6> { def V : VALUVV, @@ -879,27 +863,22 @@ multiclass VDIV_MV_V_X funct6> { ReadVIDivX_WorstCase, ReadVMask]>; } -multiclass VSALU_IV_V_X_I funct6> { +multiclass VSALU_IV_V_X funct6> { def V : VALUVV, Sched<[WriteVSALUV_WorstCase, ReadVSALUV_WorstCase, ReadVSALUV_WorstCase, ReadVMask]>; def X : VALUVX, Sched<[WriteVSALUX_WorstCase, ReadVSALUV_WorstCase, ReadVSALUX_WorstCase, ReadVMask]>; +} + +multiclass VSALU_IV_V_X_I funct6> + : VSALU_IV_V_X { def I : VALUVI, Sched<[WriteVSALUI_WorstCase, ReadVSALUV_WorstCase, ReadVMask]>; } -multiclass VSALU_IV_V_X funct6> { - def V : VALUVV, - Sched<[WriteVSALUV_WorstCase, ReadVSALUV_WorstCase, - ReadVSALUV_WorstCase, ReadVMask]>; - def X : VALUVX, - Sched<[WriteVSALUX_WorstCase, ReadVSALUV_WorstCase, - ReadVSALUX_WorstCase, ReadVMask]>; -} - multiclass VAALU_MV_V_X funct6> { def V : VALUVV, Sched<[WriteVAALUV_WorstCase, ReadVAALUV_WorstCase, @@ -1360,7 +1339,7 @@ defm VFWSUB_W : VWALU_FV_V_F<"vfwsub", 0b110110, "w">; let Uses = [FRM], mayRaiseFPException = true in { defm VFMUL_V : VMUL_FV_V_F<"vfmul", 0b100100>; defm VFDIV_V : VDIV_FV_V_F<"vfdiv", 0b100000>; -defm VFRDIV_V : VRDIV_FV_F<"vfrdiv", 0b100001>; +defm VFRDIV_V : VDIV_FV_F<"vfrdiv", 0b100001>; } // Vector Widening Floating-Point Multiply