@@ -7674,22 +7674,54 @@ class sve_int_perm_rev_z<bits<2> sz, bits<4> opc, string asm,
76747674 let hasSideEffects = 0;
76757675}
76767676
7677- multiclass sve_int_perm_rev_rbit_z<string asm> {
7677+ multiclass sve_int_perm_rev_rbit_z<string asm, SDPatternOperator op > {
76787678 def _B : sve_int_perm_rev_z<0b00, 0b0111, asm, ZPR8>;
76797679 def _H : sve_int_perm_rev_z<0b01, 0b0111, asm, ZPR16>;
76807680 def _S : sve_int_perm_rev_z<0b10, 0b0111, asm, ZPR32>;
76817681 def _D : sve_int_perm_rev_z<0b11, 0b0111, asm, ZPR64>;
7682+
7683+ def : SVE_1_Op_PassthruUndefZero_Pat<nxv16i8, op, nxv16i1, nxv16i8, !cast<Instruction>(NAME # _B)>;
7684+ def : SVE_1_Op_PassthruUndefZero_Pat<nxv8i16, op, nxv8i1, nxv8i16, !cast<Instruction>(NAME # _H)>;
7685+ def : SVE_1_Op_PassthruUndefZero_Pat<nxv4i32, op, nxv4i1, nxv4i32, !cast<Instruction>(NAME # _S)>;
7686+ def : SVE_1_Op_PassthruUndefZero_Pat<nxv2i64, op, nxv2i1, nxv2i64, !cast<Instruction>(NAME # _D)>;
76827687}
76837688
7684- multiclass sve_int_perm_rev_revb_z<string asm> {
7689+ multiclass sve_int_perm_rev_revb_z<string asm, SDPatternOperator op > {
76857690 def _H : sve_int_perm_rev_z<0b01, 0b0100, asm, ZPR16>;
76867691 def _S : sve_int_perm_rev_z<0b10, 0b0100, asm, ZPR32>;
76877692 def _D : sve_int_perm_rev_z<0b11, 0b0100, asm, ZPR64>;
7693+
7694+ def : SVE_1_Op_PassthruUndefZero_Pat<nxv8i16, op, nxv8i1, nxv8i16, !cast<Instruction>(NAME # _H)>;
7695+ def : SVE_1_Op_PassthruUndefZero_Pat<nxv4i32, op, nxv4i1, nxv4i32, !cast<Instruction>(NAME # _S)>;
7696+ def : SVE_1_Op_PassthruUndefZero_Pat<nxv2i64, op, nxv2i1, nxv2i64, !cast<Instruction>(NAME # _D)>;
76887697}
76897698
7690- multiclass sve_int_perm_rev_revh_z<string asm> {
7699+ multiclass sve_int_perm_rev_revh_z<string asm, SDPatternOperator op > {
76917700 def _S : sve_int_perm_rev_z<0b10, 0b0101, asm, ZPR32>;
76927701 def _D : sve_int_perm_rev_z<0b11, 0b0101, asm, ZPR64>;
7702+
7703+ def : SVE_1_Op_PassthruUndefZero_Pat<nxv4i32, op, nxv4i1, nxv4i32, !cast<Instruction>(NAME # _S)>;
7704+ def : SVE_1_Op_PassthruUndefZero_Pat<nxv2i64, op, nxv2i1, nxv2i64, !cast<Instruction>(NAME # _D)>;
7705+ }
7706+
7707+ multiclass sve_int_perm_rev_revw_z<string asm, SDPatternOperator op> {
7708+ def _D : sve_int_perm_rev_z<0b11, 0b0110, asm, ZPR64>;
7709+
7710+ def : SVE_1_Op_PassthruUndefZero_Pat<nxv2i64, op, nxv2i1, nxv2i64, !cast<Instruction>(NAME # _D)>;
7711+ }
7712+
7713+ multiclass sve_int_perm_rev_revd_z<string asm, SDPatternOperator op> {
7714+ def NAME : sve_int_perm_rev_z<0b00, 0b1110, asm, ZPR128>;
7715+
7716+ def : SVE_1_Op_PassthruUndefZero_Pat<nxv16i8, op, nxv16i1, nxv16i8, !cast<Instruction>(NAME)>;
7717+ def : SVE_1_Op_PassthruUndefZero_Pat<nxv8i16, op, nxv8i1, nxv8i16, !cast<Instruction>(NAME)>;
7718+ def : SVE_1_Op_PassthruUndefZero_Pat<nxv4i32, op, nxv4i1, nxv4i32, !cast<Instruction>(NAME)>;
7719+ def : SVE_1_Op_PassthruUndefZero_Pat<nxv2i64, op, nxv2i1, nxv2i64, !cast<Instruction>(NAME)>;
7720+
7721+ def : SVE_1_Op_PassthruUndefZero_Pat<nxv8bf16, op, nxv8i1, nxv8bf16, !cast<Instruction>(NAME)>;
7722+ def : SVE_1_Op_PassthruUndefZero_Pat<nxv8f16, op, nxv8i1, nxv8f16, !cast<Instruction>(NAME)>;
7723+ def : SVE_1_Op_PassthruUndefZero_Pat<nxv4f32, op, nxv4i1, nxv4f32, !cast<Instruction>(NAME)>;
7724+ def : SVE_1_Op_PassthruUndefZero_Pat<nxv2f64, op, nxv2i1, nxv2f64, !cast<Instruction>(NAME)>;
76937725}
76947726
76957727class sve_int_perm_cpy_r<bits<2> sz8_64, string asm, ZPRRegOp zprty,
0 commit comments