diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td b/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td index 83faa5bbef793..01a425298c9da 100644 --- a/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td +++ b/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td @@ -3213,7 +3213,8 @@ multiclass VPseudoTernaryWithTailPolicy; - def "_" # mx # "_E" # sew # "_MASK" : VPseudoTernaryMaskPolicy; + def "_" # mx # "_E" # sew # "_MASK" : VPseudoTernaryMaskPolicy, + RISCVMaskedPseudo; } } @@ -3232,7 +3233,8 @@ multiclass VPseudoTernaryWithTailPolicyRoundingMode; def "_" # mx # "_E" # sew # "_MASK" : VPseudoTernaryMaskPolicyRoundingMode; + Op2Class, Constraint>, + RISCVMaskedPseudo; } } diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoVVLPatterns.td b/llvm/lib/Target/RISCV/RISCVInstrInfoVVLPatterns.td index d92d3975d12f5..a27719455642a 100644 --- a/llvm/lib/Target/RISCV/RISCVInstrInfoVVLPatterns.td +++ b/llvm/lib/Target/RISCV/RISCVInstrInfoVVLPatterns.td @@ -1381,16 +1381,6 @@ multiclass VPatReductionVL { foreach vti = !if(is_float, AllFloatVectors, AllIntegerVectors) in { defvar vti_m1 = !cast(!if(is_float, "VF", "VI") # vti.SEW # "M1"); let Predicates = GetVTypePredicates.Predicates in { - def: Pat<(vti_m1.Vector (vop (vti_m1.Vector VR:$merge), - (vti.Vector vti.RegClass:$rs1), VR:$rs2, - (vti.Mask true_mask), VLOpFrag, - (XLenVT timm:$policy))), - (!cast(instruction_name#"_VS_"#vti.LMul.MX#"_E"#vti.SEW) - (vti_m1.Vector VR:$merge), - (vti.Vector vti.RegClass:$rs1), - (vti_m1.Vector VR:$rs2), - GPR:$vl, vti.Log2SEW, (XLenVT timm:$policy))>; - def: Pat<(vti_m1.Vector (vop (vti_m1.Vector VR:$merge), (vti.Vector vti.RegClass:$rs1), VR:$rs2, (vti.Mask V0), VLOpFrag, @@ -1408,19 +1398,6 @@ multiclass VPatReductionVL_RM foreach vti = !if(is_float, AllFloatVectors, AllIntegerVectors) in { defvar vti_m1 = !cast(!if(is_float, "VF", "VI") # vti.SEW # "M1"); let Predicates = GetVTypePredicates.Predicates in { - def: Pat<(vti_m1.Vector (vop (vti_m1.Vector VR:$merge), - (vti.Vector vti.RegClass:$rs1), VR:$rs2, - (vti.Mask true_mask), VLOpFrag, - (XLenVT timm:$policy))), - (!cast(instruction_name#"_VS_"#vti.LMul.MX#"_E"#vti.SEW) - (vti_m1.Vector VR:$merge), - (vti.Vector vti.RegClass:$rs1), - (vti_m1.Vector VR:$rs2), - // Value to indicate no rounding mode change in - // RISCVInsertReadWriteCSR - FRM_DYN, - GPR:$vl, vti.Log2SEW, (XLenVT timm:$policy))>; - def: Pat<(vti_m1.Vector (vop (vti_m1.Vector VR:$merge), (vti.Vector vti.RegClass:$rs1), VR:$rs2, (vti.Mask V0), VLOpFrag, @@ -1486,14 +1463,6 @@ multiclass VPatWidenReductionVL(!if(is_float, "VF", "VI") # wti.SEW # "M1"); let Predicates = !listconcat(GetVTypePredicates.Predicates, GetVTypePredicates.Predicates) in { - def: Pat<(wti_m1.Vector (vop (wti_m1.Vector VR:$merge), - (wti.Vector (extop (vti.Vector vti.RegClass:$rs1))), - VR:$rs2, (vti.Mask true_mask), VLOpFrag, - (XLenVT timm:$policy))), - (!cast(instruction_name#"_VS_"#vti.LMul.MX#"_E"#vti.SEW) - (wti_m1.Vector VR:$merge), (vti.Vector vti.RegClass:$rs1), - (wti_m1.Vector VR:$rs2), GPR:$vl, vti.Log2SEW, - (XLenVT timm:$policy))>; def: Pat<(wti_m1.Vector (vop (wti_m1.Vector VR:$merge), (wti.Vector (extop (vti.Vector vti.RegClass:$rs1))), VR:$rs2, (vti.Mask V0), VLOpFrag, @@ -1513,18 +1482,6 @@ multiclass VPatWidenReductionVL_RM(!if(is_float, "VF", "VI") # wti.SEW # "M1"); let Predicates = !listconcat(GetVTypePredicates.Predicates, GetVTypePredicates.Predicates) in { - def: Pat<(wti_m1.Vector (vop (wti_m1.Vector VR:$merge), - (wti.Vector (extop (vti.Vector vti.RegClass:$rs1))), - VR:$rs2, (vti.Mask true_mask), VLOpFrag, - (XLenVT timm:$policy))), - (!cast(instruction_name#"_VS_"#vti.LMul.MX#"_E"#vti.SEW) - (wti_m1.Vector VR:$merge), (vti.Vector vti.RegClass:$rs1), - (wti_m1.Vector VR:$rs2), - // Value to indicate no rounding mode change in - // RISCVInsertReadWriteCSR - FRM_DYN, - GPR:$vl, vti.Log2SEW, - (XLenVT timm:$policy))>; def: Pat<(wti_m1.Vector (vop (wti_m1.Vector VR:$merge), (wti.Vector (extop (vti.Vector vti.RegClass:$rs1))), VR:$rs2, (vti.Mask V0), VLOpFrag, @@ -1548,14 +1505,6 @@ multiclass VPatWidenReductionVL_Ext_VL(!if(is_float, "VF", "VI") # wti.SEW # "M1"); let Predicates = !listconcat(GetVTypePredicates.Predicates, GetVTypePredicates.Predicates) in { - def: Pat<(wti_m1.Vector (vop (wti_m1.Vector VR:$merge), - (wti.Vector (extop (vti.Vector vti.RegClass:$rs1), (vti.Mask true_mask), VLOpFrag)), - VR:$rs2, (vti.Mask true_mask), VLOpFrag, - (XLenVT timm:$policy))), - (!cast(instruction_name#"_VS_"#vti.LMul.MX#"_E"#vti.SEW) - (wti_m1.Vector VR:$merge), (vti.Vector vti.RegClass:$rs1), - (wti_m1.Vector VR:$rs2), GPR:$vl, vti.Log2SEW, - (XLenVT timm:$policy))>; def: Pat<(wti_m1.Vector (vop (wti_m1.Vector VR:$merge), (wti.Vector (extop (vti.Vector vti.RegClass:$rs1), (vti.Mask true_mask), VLOpFrag)), VR:$rs2, (vti.Mask V0), VLOpFrag, @@ -1575,18 +1524,6 @@ multiclass VPatWidenReductionVL_Ext_VL_RM(!if(is_float, "VF", "VI") # wti.SEW # "M1"); let Predicates = !listconcat(GetVTypePredicates.Predicates, GetVTypePredicates.Predicates) in { - def: Pat<(wti_m1.Vector (vop (wti_m1.Vector VR:$merge), - (wti.Vector (extop (vti.Vector vti.RegClass:$rs1), (vti.Mask true_mask), VLOpFrag)), - VR:$rs2, (vti.Mask true_mask), VLOpFrag, - (XLenVT timm:$policy))), - (!cast(instruction_name#"_VS_"#vti.LMul.MX#"_E"#vti.SEW) - (wti_m1.Vector VR:$merge), (vti.Vector vti.RegClass:$rs1), - (wti_m1.Vector VR:$rs2), - // Value to indicate no rounding mode change in - // RISCVInsertReadWriteCSR - FRM_DYN, - GPR:$vl, vti.Log2SEW, - (XLenVT timm:$policy))>; def: Pat<(wti_m1.Vector (vop (wti_m1.Vector VR:$merge), (wti.Vector (extop (vti.Vector vti.RegClass:$rs1), (vti.Mask true_mask), VLOpFrag)), VR:$rs2, (vti.Mask V0), VLOpFrag, diff --git a/llvm/test/CodeGen/RISCV/rvv/rvv-peephole-vmerge-vops.ll b/llvm/test/CodeGen/RISCV/rvv/rvv-peephole-vmerge-vops.ll index 450ab3cbb0dc3..c639f092444fc 100644 --- a/llvm/test/CodeGen/RISCV/rvv/rvv-peephole-vmerge-vops.ll +++ b/llvm/test/CodeGen/RISCV/rvv/rvv-peephole-vmerge-vops.ll @@ -1049,11 +1049,8 @@ define @vfredusum( %passthru, @vredsum_allones_mask( %passthru, %x, %y, i64 %vl) { ; CHECK-LABEL: vredsum_allones_mask: ; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vredsum.vs v11, v9, v10 -; CHECK-NEXT: vsetvli zero, zero, e32, m1, tu, ma -; CHECK-NEXT: vmv.v.v v8, v11 +; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, ma +; CHECK-NEXT: vredsum.vs v8, v9, v10 ; CHECK-NEXT: ret %splat = insertelement poison, i1 -1, i32 0 %mask = shufflevector %splat, poison, zeroinitializer @@ -1070,12 +1067,9 @@ define @vredsum_allones_mask( %passthru, @vfredusum_allones_mask( %passthru, %x, %y, i64 %vl) { ; CHECK-LABEL: vfredusum_allones_mask: ; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma +; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vfredusum.vs v11, v9, v10 -; CHECK-NEXT: vsetvli zero, zero, e32, m1, tu, ma -; CHECK-NEXT: vmv.v.v v8, v11 +; CHECK-NEXT: vfredusum.vs v8, v9, v10 ; CHECK-NEXT: fsrm a0 ; CHECK-NEXT: ret %splat = insertelement poison, i1 -1, i32 0