@@ -2033,6 +2033,10 @@ multiclass VPseudoBinaryFV_VV<LMULInfo m, string Constraint = ""> {
20332033 defm _VV : VPseudoBinary<m.vrclass, m.vrclass, m.vrclass, m, Constraint>;
20342034}
20352035
2036+ multiclass VPseudoBinaryFV_VV_E<LMULInfo m, int sew, string Constraint = ""> {
2037+ defm _VV : VPseudoBinary_E<m.vrclass, m.vrclass, m.vrclass, m, sew, Constraint>;
2038+ }
2039+
20362040multiclass VPseudoVGTR_VV_EEW<int eew, string Constraint = ""> {
20372041 foreach m = MxList in {
20382042 defvar mx = m.MX;
@@ -2060,6 +2064,10 @@ multiclass VPseudoBinaryV_VX<LMULInfo m, string Constraint = ""> {
20602064 defm "_VX" : VPseudoBinary<m.vrclass, m.vrclass, GPR, m, Constraint>;
20612065}
20622066
2067+ multiclass VPseudoBinaryV_VX_E<LMULInfo m, int sew, string Constraint = ""> {
2068+ defm "_VX" : VPseudoBinary_E<m.vrclass, m.vrclass, GPR, m, sew, Constraint>;
2069+ }
2070+
20632071multiclass VPseudoVSLD1_VX<string Constraint = ""> {
20642072 foreach m = MxList in {
20652073 defvar mx = m.MX;
@@ -2077,6 +2085,12 @@ multiclass VPseudoBinaryV_VF<LMULInfo m, FPR_Info f, string Constraint = ""> {
20772085 f.fprclass, m, Constraint>;
20782086}
20792087
2088+ multiclass VPseudoBinaryV_VF_E<LMULInfo m, int sew, FPR_Info f,
2089+ string Constraint = ""> {
2090+ defm "_V" # f.FX : VPseudoBinary_E<m.vrclass, m.vrclass,
2091+ f.fprclass, m, sew, Constraint>;
2092+ }
2093+
20802094multiclass VPseudoVSLD1_VF<string Constraint = ""> {
20812095 foreach f = FPList in {
20822096 foreach m = f.MxList in {
@@ -2621,15 +2635,18 @@ multiclass VPseudoVMUL_VV_VX {
26212635multiclass VPseudoVDIV_VV_VX {
26222636 foreach m = MxList in {
26232637 defvar mx = m.MX;
2624- defvar WriteVIDivV_MX = !cast<SchedWrite>("WriteVIDivV_" # mx);
2625- defvar WriteVIDivX_MX = !cast<SchedWrite>("WriteVIDivX_" # mx);
2626- defvar ReadVIDivV_MX = !cast<SchedRead>("ReadVIDivV_" # mx);
2627- defvar ReadVIDivX_MX = !cast<SchedRead>("ReadVIDivX_" # mx);
2628-
2629- defm "" : VPseudoBinaryV_VV<m>,
2630- Sched<[WriteVIDivV_MX, ReadVIDivV_MX, ReadVIDivV_MX, ReadVMask]>;
2631- defm "" : VPseudoBinaryV_VX<m>,
2632- Sched<[WriteVIDivX_MX, ReadVIDivV_MX, ReadVIDivX_MX, ReadVMask]>;
2638+ defvar sews = SchedSEWSet<mx>.val;
2639+ foreach e = sews in {
2640+ defvar WriteVIDivV_MX_E = !cast<SchedWrite>("WriteVIDivV_" # mx # "_E" # e);
2641+ defvar WriteVIDivX_MX_E = !cast<SchedWrite>("WriteVIDivX_" # mx # "_E" # e);
2642+ defvar ReadVIDivV_MX_E = !cast<SchedRead>("ReadVIDivV_" # mx # "_E" # e);
2643+ defvar ReadVIDivX_MX_E = !cast<SchedRead>("ReadVIDivX_" # mx # "_E" # e);
2644+
2645+ defm "" : VPseudoBinaryV_VV_E<m, e>,
2646+ Sched<[WriteVIDivV_MX_E, ReadVIDivV_MX_E, ReadVIDivV_MX_E, ReadVMask]>;
2647+ defm "" : VPseudoBinaryV_VX_E<m, e>,
2648+ Sched<[WriteVIDivX_MX_E, ReadVIDivV_MX_E, ReadVIDivX_MX_E, ReadVMask]>;
2649+ }
26332650 }
26342651}
26352652
@@ -2659,22 +2676,28 @@ multiclass VPseudoVFMUL_VV_VF {
26592676multiclass VPseudoVFDIV_VV_VF {
26602677 foreach m = MxListF in {
26612678 defvar mx = m.MX;
2662- defvar WriteVFDivV_MX = !cast<SchedWrite>("WriteVFDivV_" # mx);
2663- defvar ReadVFDivV_MX = !cast<SchedRead>("ReadVFDivV_" # mx);
2679+ defvar sews = SchedSEWSet<mx>.val;
2680+ foreach e = sews in {
2681+ defvar WriteVFDivV_MX_E = !cast<SchedWrite>("WriteVFDivV_" # mx # "_E" # e);
2682+ defvar ReadVFDivV_MX_E = !cast<SchedRead>("ReadVFDivV_" # mx # "_E" # e);
26642683
2665- defm "" : VPseudoBinaryFV_VV<m>,
2666- Sched<[WriteVFDivV_MX, ReadVFDivV_MX, ReadVFDivV_MX, ReadVMask]>;
2684+ defm "" : VPseudoBinaryFV_VV_E<m, e>,
2685+ Sched<[WriteVFDivV_MX_E, ReadVFDivV_MX_E, ReadVFDivV_MX_E, ReadVMask]>;
2686+ }
26672687 }
26682688
26692689 foreach f = FPList in {
26702690 foreach m = f.MxList in {
26712691 defvar mx = m.MX;
2672- defvar WriteVFDivF_MX = !cast<SchedWrite>("WriteVFDivF_" # mx);
2673- defvar ReadVFDivV_MX = !cast<SchedRead>("ReadVFDivV_" # mx);
2674- defvar ReadVFDivF_MX = !cast<SchedRead>("ReadVFDivF_" # mx);
2692+ defvar sews = SchedSEWSet<mx>.val;
2693+ foreach e = sews in {
2694+ defvar WriteVFDivF_MX_E = !cast<SchedWrite>("WriteVFDivF_" # mx # "_E" # e);
2695+ defvar ReadVFDivV_MX_E = !cast<SchedRead>("ReadVFDivV_" # mx # "_E" # e);
2696+ defvar ReadVFDivF_MX_E = !cast<SchedRead>("ReadVFDivF_" # mx # "_E" # e);
26752697
2676- defm "" : VPseudoBinaryV_VF<m, f>,
2677- Sched<[WriteVFDivF_MX, ReadVFDivV_MX, ReadVFDivF_MX, ReadVMask]>;
2698+ defm "" : VPseudoBinaryV_VF_E<m, e, f>,
2699+ Sched<[WriteVFDivF_MX_E, ReadVFDivV_MX_E, ReadVFDivF_MX_E, ReadVMask]>;
2700+ }
26782701 }
26792702 }
26802703}
@@ -2683,11 +2706,15 @@ multiclass VPseudoVFRDIV_VF {
26832706 foreach f = FPList in {
26842707 foreach m = f.MxList in {
26852708 defvar mx = m.MX;
2686- defvar WriteVFDivF_MX = !cast<SchedWrite>("WriteVFDivF_" # mx);
2687- defvar ReadVFDivV_MX = !cast<SchedRead>("ReadVFDivV_" # mx);
2688- defvar ReadVFDivF_MX = !cast<SchedRead>("ReadVFDivF_" # mx);
2689- defm "" : VPseudoBinaryV_VF<m, f>,
2690- Sched<[WriteVFDivF_MX, ReadVFDivV_MX, ReadVFDivF_MX, ReadVMask]>;
2709+ defvar sews = SchedSEWSet<mx>.val;
2710+ foreach e = sews in {
2711+ defvar WriteVFDivF_MX_E = !cast<SchedWrite>("WriteVFDivF_" # mx # "_E" # e);
2712+ defvar ReadVFDivV_MX_E = !cast<SchedRead>("ReadVFDivV_" # mx # "_E" # e);
2713+ defvar ReadVFDivF_MX_E = !cast<SchedRead>("ReadVFDivF_" # mx # "_E" # e);
2714+
2715+ defm "" : VPseudoBinaryV_VF_E<m, e, f>,
2716+ Sched<[WriteVFDivF_MX_E, ReadVFDivV_MX_E, ReadVFDivF_MX_E, ReadVMask]>;
2717+ }
26912718 }
26922719 }
26932720}
@@ -4503,6 +4530,16 @@ multiclass VPatBinaryV_VV<string intrinsic, string instruction,
45034530 vti.RegClass, vti.RegClass>;
45044531}
45054532
4533+ multiclass VPatBinaryV_VV_E<string intrinsic, string instruction,
4534+ list<VTypeInfo> vtilist> {
4535+ foreach vti = vtilist in
4536+ defm : VPatBinaryTA<intrinsic,
4537+ instruction # "_VV_" # vti.LMul.MX # "_E" # vti.SEW,
4538+ vti.Vector, vti.Vector, vti.Vector,vti.Mask,
4539+ vti.Log2SEW, vti.RegClass,
4540+ vti.RegClass, vti.RegClass>;
4541+ }
4542+
45064543multiclass VPatBinaryV_VV_INT_E<string intrinsic, string instruction,
45074544 list<VTypeInfo> vtilist> {
45084545 foreach vti = vtilist in {
@@ -4545,6 +4582,18 @@ multiclass VPatBinaryV_VX<string intrinsic, string instruction,
45454582 }
45464583}
45474584
4585+ multiclass VPatBinaryV_VX_E<string intrinsic, string instruction,
4586+ list<VTypeInfo> vtilist> {
4587+ foreach vti = vtilist in {
4588+ defvar kind = "V"#vti.ScalarSuffix;
4589+ defm : VPatBinaryTA<intrinsic,
4590+ instruction#"_"#kind#"_"#vti.LMul.MX#"_E"#vti.SEW,
4591+ vti.Vector, vti.Vector, vti.Scalar, vti.Mask,
4592+ vti.Log2SEW, vti.RegClass,
4593+ vti.RegClass, vti.ScalarRegClass>;
4594+ }
4595+ }
4596+
45484597multiclass VPatBinaryV_VX_INT<string intrinsic, string instruction,
45494598 list<VTypeInfo> vtilist> {
45504599 foreach vti = vtilist in
@@ -4810,6 +4859,11 @@ multiclass VPatBinaryV_VV_VX<string intrinsic, string instruction,
48104859 : VPatBinaryV_VV<intrinsic, instruction, vtilist>,
48114860 VPatBinaryV_VX<intrinsic, instruction, vtilist>;
48124861
4862+ multiclass VPatBinaryV_VV_VX_E<string intrinsic, string instruction,
4863+ list<VTypeInfo> vtilist>
4864+ : VPatBinaryV_VV_E<intrinsic, instruction, vtilist>,
4865+ VPatBinaryV_VX_E<intrinsic, instruction, vtilist>;
4866+
48134867multiclass VPatBinaryV_VX_VI<string intrinsic, string instruction,
48144868 list<VTypeInfo> vtilist>
48154869 : VPatBinaryV_VX<intrinsic, instruction, vtilist>,
@@ -6091,10 +6145,10 @@ defm : VPatBinaryV_VV_VX<"int_riscv_vmulhsu", "PseudoVMULHSU", AllIntegerVectors
60916145//===----------------------------------------------------------------------===//
60926146// 11.11. Vector Integer Divide Instructions
60936147//===----------------------------------------------------------------------===//
6094- defm : VPatBinaryV_VV_VX <"int_riscv_vdivu", "PseudoVDIVU", AllIntegerVectors>;
6095- defm : VPatBinaryV_VV_VX <"int_riscv_vdiv", "PseudoVDIV", AllIntegerVectors>;
6096- defm : VPatBinaryV_VV_VX <"int_riscv_vremu", "PseudoVREMU", AllIntegerVectors>;
6097- defm : VPatBinaryV_VV_VX <"int_riscv_vrem", "PseudoVREM", AllIntegerVectors>;
6148+ defm : VPatBinaryV_VV_VX_E <"int_riscv_vdivu", "PseudoVDIVU", AllIntegerVectors>;
6149+ defm : VPatBinaryV_VV_VX_E <"int_riscv_vdiv", "PseudoVDIV", AllIntegerVectors>;
6150+ defm : VPatBinaryV_VV_VX_E <"int_riscv_vremu", "PseudoVREMU", AllIntegerVectors>;
6151+ defm : VPatBinaryV_VV_VX_E <"int_riscv_vrem", "PseudoVREM", AllIntegerVectors>;
60986152
60996153//===----------------------------------------------------------------------===//
61006154// 11.12. Vector Widening Integer Multiply Instructions
@@ -6207,8 +6261,8 @@ defm : VPatBinaryW_WV_WX<"int_riscv_vfwsub_w", "PseudoVFWSUB", AllWidenableFloat
62076261// 13.4. Vector Single-Width Floating-Point Multiply/Divide Instructions
62086262//===----------------------------------------------------------------------===//
62096263defm : VPatBinaryV_VV_VX<"int_riscv_vfmul", "PseudoVFMUL", AllFloatVectors>;
6210- defm : VPatBinaryV_VV_VX <"int_riscv_vfdiv", "PseudoVFDIV", AllFloatVectors>;
6211- defm : VPatBinaryV_VX <"int_riscv_vfrdiv", "PseudoVFRDIV", AllFloatVectors>;
6264+ defm : VPatBinaryV_VV_VX_E <"int_riscv_vfdiv", "PseudoVFDIV", AllFloatVectors>;
6265+ defm : VPatBinaryV_VX_E <"int_riscv_vfrdiv", "PseudoVFRDIV", AllFloatVectors>;
62126266
62136267//===----------------------------------------------------------------------===//
62146268// 13.5. Vector Widening Floating-Point Multiply
0 commit comments