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 @@ -41,6 +41,7 @@ defvar TAIL_UNDISTURBED_MASK_UNDISTURBED = 0; defvar TAIL_AGNOSTIC = 1; +defvar TU_MU = 0; defvar TA_MA = 3; //===----------------------------------------------------------------------===// @@ -1100,7 +1101,8 @@ DAGOperand Op2Class, string Constraint> : Pseudo<(outs RetClass:$rd), - (ins RetClass:$merge, Op1Class:$rs2, Op2Class:$rs1, AVL:$vl, ixlenimm:$sew), []>, + (ins RetClass:$merge, Op1Class:$rs2, Op2Class:$rs1, AVL:$vl, + ixlenimm:$sew, ixlenimm:$policy), []>, RISCVVPseudo { let mayLoad = 0; let mayStore = 0; @@ -1108,6 +1110,7 @@ let Constraints = Join<[Constraint, "$rd = $merge"], ",">.ret; let HasVLOp = 1; let HasSEWOp = 1; + let HasVecPolicyOp = 1; } // Special version of VPseudoBinaryNoMask where we pretend the first source is @@ -3936,7 +3939,7 @@ (result_type result_reg_class:$merge), (op1_type op1_reg_class:$rs1), (op2_type op2_kind:$rs2), - GPR:$vl, sew)>; + GPR:$vl, sew, TU_MU)>; // Same as above but source operands are swapped. class VPatBinaryNoMaskSwapped; + vti.Log2SEW, TU_MU)>; def : Pat<(vti.Vector (int_riscv_vrsub_mask (vti.Vector vti.RegClass:$merge), (vti.Vector vti.RegClass:$rs2), (vti.Vector vti.RegClass:$rs1), diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoVSDPatterns.td b/llvm/lib/Target/RISCV/RISCVInstrInfoVSDPatterns.td --- a/llvm/lib/Target/RISCV/RISCVInstrInfoVSDPatterns.td +++ b/llvm/lib/Target/RISCV/RISCVInstrInfoVSDPatterns.td @@ -91,7 +91,7 @@ (result_type (IMPLICIT_DEF)), op_reg_class:$rs1, op_reg_class:$rs2, - avl, log2sew)>; + avl, log2sew, TA_MA)>; class VPatBinarySDNode_XI; + avl, log2sew, TA_MA)>; multiclass VPatBinarySDNode_VV_VX vtilist = AllIntegerVectors, @@ -166,7 +166,7 @@ (result_type (IMPLICIT_DEF)), vop_reg_class:$rs1, (xop_type xop_kind:$rs2), - avl, log2sew)>; + avl, log2sew, TA_MA)>; multiclass VPatBinaryFPSDNode_VV_VF { @@ -196,7 +196,7 @@ (fvti.Vector (IMPLICIT_DEF)), fvti.RegClass:$rs1, (fvti.Scalar fvti.ScalarRegClass:$rs2), - fvti.AVL, fvti.Log2SEW)>; + fvti.AVL, fvti.Log2SEW, TA_MA)>; } multiclass VPatIntegerSetCCSDNode_VV("PseudoVSLIDE1UP_VX_"#vti.LMul.MX#"_TU") - vti.RegClass:$rd, vti.RegClass:$rs1, GPR:$rs2, GPR:$vl, vti.Log2SEW)>; + vti.RegClass:$rd, vti.RegClass:$rs1, GPR:$rs2, GPR:$vl, vti.Log2SEW, TU_MU)>; def : Pat<(vti.Vector (riscv_slide1down_vl (vti.Vector undef), (vti.Vector vti.RegClass:$rs1), GPR:$rs2, (vti.Mask true_mask), @@ -2435,7 +2435,7 @@ GPR:$rs2, (vti.Mask true_mask), VLOpFrag)), (!cast("PseudoVSLIDE1DOWN_VX_"#vti.LMul.MX#"_TU") - vti.RegClass:$rd, vti.RegClass:$rs1, GPR:$rs2, GPR:$vl, vti.Log2SEW)>; + vti.RegClass:$rd, vti.RegClass:$rs1, GPR:$rs2, GPR:$vl, vti.Log2SEW, TU_MU)>; } } @@ -2452,7 +2452,7 @@ vti.Scalar:$rs2, (vti.Mask true_mask), VLOpFrag)), (!cast("PseudoVFSLIDE1UP_V"#vti.ScalarSuffix#"_"#vti.LMul.MX#"_TU") - vti.RegClass:$rd, vti.RegClass:$rs1, vti.ScalarRegClass:$rs2, GPR:$vl, vti.Log2SEW)>; + vti.RegClass:$rd, vti.RegClass:$rs1, vti.ScalarRegClass:$rs2, GPR:$vl, vti.Log2SEW, TU_MU)>; def : Pat<(vti.Vector (riscv_fslide1down_vl (vti.Vector undef), (vti.Vector vti.RegClass:$rs1), vti.Scalar:$rs2, (vti.Mask true_mask), @@ -2464,7 +2464,7 @@ vti.Scalar:$rs2, (vti.Mask true_mask), VLOpFrag)), (!cast("PseudoVFSLIDE1DOWN_V"#vti.ScalarSuffix#"_"#vti.LMul.MX#"_TU") - vti.RegClass:$rd, vti.RegClass:$rs1, vti.ScalarRegClass:$rs2, GPR:$vl, vti.Log2SEW)>; + vti.RegClass:$rd, vti.RegClass:$rs1, vti.ScalarRegClass:$rs2, GPR:$vl, vti.Log2SEW, TU_MU)>; } }