@@ -7674,22 +7674,54 @@ class sve_int_perm_rev_z<bits<2> sz, bits<4> opc, string asm,
7674
7674
let hasSideEffects = 0;
7675
7675
}
7676
7676
7677
- multiclass sve_int_perm_rev_rbit_z<string asm> {
7677
+ multiclass sve_int_perm_rev_rbit_z<string asm, SDPatternOperator op > {
7678
7678
def _B : sve_int_perm_rev_z<0b00, 0b0111, asm, ZPR8>;
7679
7679
def _H : sve_int_perm_rev_z<0b01, 0b0111, asm, ZPR16>;
7680
7680
def _S : sve_int_perm_rev_z<0b10, 0b0111, asm, ZPR32>;
7681
7681
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)>;
7682
7687
}
7683
7688
7684
- multiclass sve_int_perm_rev_revb_z<string asm> {
7689
+ multiclass sve_int_perm_rev_revb_z<string asm, SDPatternOperator op > {
7685
7690
def _H : sve_int_perm_rev_z<0b01, 0b0100, asm, ZPR16>;
7686
7691
def _S : sve_int_perm_rev_z<0b10, 0b0100, asm, ZPR32>;
7687
7692
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)>;
7688
7697
}
7689
7698
7690
- multiclass sve_int_perm_rev_revh_z<string asm> {
7699
+ multiclass sve_int_perm_rev_revh_z<string asm, SDPatternOperator op > {
7691
7700
def _S : sve_int_perm_rev_z<0b10, 0b0101, asm, ZPR32>;
7692
7701
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)>;
7693
7725
}
7694
7726
7695
7727
class sve_int_perm_cpy_r<bits<2> sz8_64, string asm, ZPRRegOp zprty,
0 commit comments