@@ -274,9 +274,11 @@ multiclass VPseudoBinaryNoMaskPolicy_Zvk<VReg RetClass,
274274multiclass VPseudoTernaryNoMask_Zvk<VReg RetClass,
275275 VReg Op1Class,
276276 DAGOperand Op2Class,
277- LMULInfo MInfo> {
278- let VLMul = MInfo.value in
279- def "_" # MInfo.MX : VPseudoTernaryNoMask_Zvk<RetClass, Op1Class, Op2Class>;
277+ LMULInfo MInfo, int sew = 0> {
278+ let VLMul = MInfo.value, SEW = sew in {
279+ defvar suffix = !if(sew, "_" # MInfo.MX # "_E" # sew, "_" # MInfo.MX);
280+ def suffix : VPseudoTernaryNoMask_Zvk<RetClass, Op1Class, Op2Class>;
281+ }
280282}
281283
282284multiclass VPseudoBinaryV_V_NoMask_Zvk<LMULInfo m> {
@@ -348,12 +350,12 @@ multiclass VPseudoVSHA2CL {
348350 }
349351}
350352
351- multiclass VPseudoVSHA2MS {
352- foreach m = MxListVF4 in {
353+ multiclass VPseudoVSHA2MS<int sew = 0> {
354+ foreach m = !if(!eq(sew, 64), MxListVF8, MxListVF4) in {
353355 defvar mx = m.MX;
354- defm _VV : VPseudoTernaryNoMask_Zvk<m.vrclass, m.vrclass, m.vrclass, m>,
356+ defm _VV : VPseudoTernaryNoMask_Zvk<m.vrclass, m.vrclass, m.vrclass, m, sew = sew >,
355357 SchedTernary<"WriteVSHA2MSV", "ReadVSHA2MSV", "ReadVSHA2MSV",
356- "ReadVSHA2MSV", mx>;
358+ "ReadVSHA2MSV", mx, sew >;
357359 }
358360}
359361
@@ -564,7 +566,9 @@ let Predicates = [HasStdExtZvkned] in {
564566let Predicates = [HasStdExtZvknhaOrZvknhb] in {
565567 defm PseudoVSHA2CH : VPseudoVSHA2CH;
566568 defm PseudoVSHA2CL : VPseudoVSHA2CL;
567- defm PseudoVSHA2MS : VPseudoVSHA2MS;
569+ defm PseudoVSHA2MS : VPseudoVSHA2MS<sew=32>;
570+ let Predicates = [HasStdExtZvknhb] in
571+ defm PseudoVSHA2MS : VPseudoVSHA2MS<sew=64>;
568572} // Predicates = [HasStdExtZvknhaOrZvknhb]
569573
570574let Predicates = [HasStdExtZvksed] in {
@@ -944,12 +948,14 @@ multiclass VPatUnaryV_V_S_NoMask_Zvk<string intrinsic, string instruction,
944948}
945949
946950multiclass VPatBinaryV_VV_NoMask<string intrinsic, string instruction,
947- list<VTypeInfo> vtilist> {
951+ list<VTypeInfo> vtilist,
952+ bit isSEWAware = false> {
948953 foreach vti = vtilist in
949954 def : VPatTernaryNoMaskWithPolicy<intrinsic, instruction, "VV",
950955 vti.Vector, vti.Vector, vti.Vector,
951956 vti.Log2SEW, vti.LMul, vti.RegClass,
952- vti.RegClass, vti.RegClass>;
957+ vti.RegClass, vti.RegClass,
958+ isSEWAware = isSEWAware>;
953959}
954960
955961multiclass VPatBinaryV_VI_NoMask<string intrinsic, string instruction,
@@ -1101,13 +1107,13 @@ let Predicates = [HasStdExtZvkned] in {
11011107let Predicates = [HasStdExtZvknha] in {
11021108 defm : VPatBinaryV_VV_NoMask<"int_riscv_vsha2ch", "PseudoVSHA2CH", I32IntegerVectors>;
11031109 defm : VPatBinaryV_VV_NoMask<"int_riscv_vsha2cl", "PseudoVSHA2CH", I32IntegerVectors>;
1104- defm : VPatBinaryV_VV_NoMask<"int_riscv_vsha2ms", "PseudoVSHA2MS", I32IntegerVectors>;
1110+ defm : VPatBinaryV_VV_NoMask<"int_riscv_vsha2ms", "PseudoVSHA2MS", I32IntegerVectors, isSEWAware=true >;
11051111} // Predicates = [HasStdExtZvknha]
11061112
11071113let Predicates = [HasStdExtZvknhb] in {
11081114 defm : VPatBinaryV_VV_NoMask<"int_riscv_vsha2ch", "PseudoVSHA2CH", I32I64IntegerVectors>;
11091115 defm : VPatBinaryV_VV_NoMask<"int_riscv_vsha2cl", "PseudoVSHA2CH", I32I64IntegerVectors>;
1110- defm : VPatBinaryV_VV_NoMask<"int_riscv_vsha2ms", "PseudoVSHA2MS", I32I64IntegerVectors>;
1116+ defm : VPatBinaryV_VV_NoMask<"int_riscv_vsha2ms", "PseudoVSHA2MS", I32I64IntegerVectors, isSEWAware=true >;
11111117} // Predicates = [HasStdExtZvknhb]
11121118
11131119let Predicates = [HasStdExtZvksed] in {
0 commit comments