@@ -136,11 +136,25 @@ def SDT_RISCVVecFMA_VL : SDTypeProfile<1, 5, [SDTCisSameAs<0, 1>,
136
136
SDTCVecEltisVT<4, i1>,
137
137
SDTCisSameNumEltsAs<0, 4>,
138
138
SDTCisVT<5, XLenVT>]>;
139
- def riscv_vfmadd_vl : SDNode<"RISCVISD::VFMADD_VL", SDT_RISCVVecFMA_VL, [SDNPCommutative]>;
139
+ def riscv_vfmadd_vl : SDNode<"RISCVISD::VFMADD_VL", SDT_RISCVVecFMA_VL, [SDNPCommutative]>;
140
140
def riscv_vfnmadd_vl : SDNode<"RISCVISD::VFNMADD_VL", SDT_RISCVVecFMA_VL, [SDNPCommutative]>;
141
- def riscv_vfmsub_vl : SDNode<"RISCVISD::VFMSUB_VL", SDT_RISCVVecFMA_VL, [SDNPCommutative]>;
141
+ def riscv_vfmsub_vl : SDNode<"RISCVISD::VFMSUB_VL", SDT_RISCVVecFMA_VL, [SDNPCommutative]>;
142
142
def riscv_vfnmsub_vl : SDNode<"RISCVISD::VFNMSUB_VL", SDT_RISCVVecFMA_VL, [SDNPCommutative]>;
143
143
144
+ def SDT_RISCVWVecFMA_VL : SDTypeProfile<1, 5, [SDTCisVec<0>, SDTCisFP<0>,
145
+ SDTCisVec<1>, SDTCisFP<1>,
146
+ SDTCisOpSmallerThanOp<1, 0>,
147
+ SDTCisSameNumEltsAs<0, 1>,
148
+ SDTCisSameAs<1, 2>,
149
+ SDTCisSameAs<0, 3>,
150
+ SDTCVecEltisVT<4, i1>,
151
+ SDTCisSameNumEltsAs<0, 4>,
152
+ SDTCisVT<5, XLenVT>]>;
153
+ def riscv_vfwmadd_vl : SDNode<"RISCVISD::VFWMADD_VL", SDT_RISCVWVecFMA_VL, [SDNPCommutative]>;
154
+ def riscv_vfwnmadd_vl : SDNode<"RISCVISD::VFWNMADD_VL", SDT_RISCVWVecFMA_VL, [SDNPCommutative]>;
155
+ def riscv_vfwmsub_vl : SDNode<"RISCVISD::VFWMSUB_VL", SDT_RISCVWVecFMA_VL, [SDNPCommutative]>;
156
+ def riscv_vfwnmsub_vl : SDNode<"RISCVISD::VFWNMSUB_VL", SDT_RISCVWVecFMA_VL, [SDNPCommutative]>;
157
+
144
158
def riscv_strict_vfmadd_vl : SDNode<"RISCVISD::STRICT_VFMADD_VL", SDT_RISCVVecFMA_VL, [SDNPCommutative, SDNPHasChain]>;
145
159
def riscv_strict_vfnmadd_vl : SDNode<"RISCVISD::STRICT_VFNMADD_VL", SDT_RISCVVecFMA_VL, [SDNPCommutative, SDNPHasChain]>;
146
160
def riscv_strict_vfmsub_vl : SDNode<"RISCVISD::STRICT_VFMSUB_VL", SDT_RISCVVecFMA_VL, [SDNPCommutative, SDNPHasChain]>;
@@ -1514,25 +1528,15 @@ multiclass VPatWidenFPMulAccVL_VV_VF<SDNode vop, string instruction_name> {
1514
1528
foreach vtiToWti = AllWidenableFloatVectors in {
1515
1529
defvar vti = vtiToWti.Vti;
1516
1530
defvar wti = vtiToWti.Wti;
1517
- def : Pat<(vop
1518
- (wti.Vector (riscv_fpextend_vl_oneuse
1519
- (vti.Vector vti.RegClass:$rs1),
1520
- (vti.Mask true_mask), VLOpFrag)),
1521
- (wti.Vector (riscv_fpextend_vl_oneuse
1522
- (vti.Vector vti.RegClass:$rs2),
1523
- (vti.Mask true_mask), VLOpFrag)),
1531
+ def : Pat<(vop (vti.Vector vti.RegClass:$rs1),
1532
+ (vti.Vector vti.RegClass:$rs2),
1524
1533
(wti.Vector wti.RegClass:$rd), (vti.Mask true_mask),
1525
1534
VLOpFrag),
1526
1535
(!cast<Instruction>(instruction_name#"_VV_"#vti.LMul.MX)
1527
1536
wti.RegClass:$rd, vti.RegClass:$rs1, vti.RegClass:$rs2,
1528
1537
GPR:$vl, vti.Log2SEW, TAIL_AGNOSTIC)>;
1529
- def : Pat<(vop
1530
- (wti.Vector (riscv_fpextend_vl_oneuse
1531
- (vti.Vector (SplatFPOp vti.ScalarRegClass:$rs1)),
1532
- (vti.Mask true_mask), VLOpFrag)),
1533
- (wti.Vector (riscv_fpextend_vl_oneuse
1534
- (vti.Vector vti.RegClass:$rs2),
1535
- (vti.Mask true_mask), VLOpFrag)),
1538
+ def : Pat<(vop (vti.Vector (SplatFPOp vti.ScalarRegClass:$rs1)),
1539
+ (vti.Vector vti.RegClass:$rs2),
1536
1540
(wti.Vector wti.RegClass:$rd), (vti.Mask true_mask),
1537
1541
VLOpFrag),
1538
1542
(!cast<Instruction>(instruction_name#"_V"#vti.ScalarSuffix#"_"#vti.LMul.MX)
@@ -1827,10 +1831,10 @@ defm : VPatFPMulAccVL_VV_VF<riscv_vfnmadd_vl_oneuse, "PseudoVFNMACC">;
1827
1831
defm : VPatFPMulAccVL_VV_VF<riscv_vfnmsub_vl_oneuse, "PseudoVFNMSAC">;
1828
1832
1829
1833
// 13.7. Vector Widening Floating-Point Fused Multiply-Add Instructions
1830
- defm : VPatWidenFPMulAccVL_VV_VF<riscv_vfmadd_vl , "PseudoVFWMACC">;
1831
- defm : VPatWidenFPMulAccVL_VV_VF<riscv_vfnmadd_vl , "PseudoVFWNMACC">;
1832
- defm : VPatWidenFPMulAccVL_VV_VF<riscv_vfmsub_vl , "PseudoVFWMSAC">;
1833
- defm : VPatWidenFPMulAccVL_VV_VF<riscv_vfnmsub_vl , "PseudoVFWNMSAC">;
1834
+ defm : VPatWidenFPMulAccVL_VV_VF<riscv_vfwmadd_vl , "PseudoVFWMACC">;
1835
+ defm : VPatWidenFPMulAccVL_VV_VF<riscv_vfwnmadd_vl , "PseudoVFWNMACC">;
1836
+ defm : VPatWidenFPMulAccVL_VV_VF<riscv_vfwmsub_vl , "PseudoVFWMSAC">;
1837
+ defm : VPatWidenFPMulAccVL_VV_VF<riscv_vfwnmsub_vl , "PseudoVFWNMSAC">;
1834
1838
1835
1839
// 13.11. Vector Floating-Point MIN/MAX Instructions
1836
1840
defm : VPatBinaryFPVL_VV_VF<riscv_fminnum_vl, "PseudoVFMIN">;
0 commit comments