Skip to content

Commit 3075771

Browse files
[AArch64] Generate zeroing forms of certain SVE2.2 instructions (10/11)
1 parent b2073fb commit 3075771

File tree

3 files changed

+1520
-8
lines changed

3 files changed

+1520
-8
lines changed

llvm/lib/Target/AArch64/AArch64SVEInstrInfo.td

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4339,11 +4339,11 @@ let Predicates = [HasSVE2p2orSME2p2] in {
43394339
defm LASTP_XPP : sve_int_pcount_pred_tmp<0b010, "lastp">;
43404340

43414341
// SVE reverse within elements, zeroing predicate
4342-
defm RBIT_ZPzZ : sve_int_perm_rev_rbit_z<"rbit">;
4343-
defm REVB_ZPzZ : sve_int_perm_rev_revb_z<"revb">;
4344-
defm REVH_ZPzZ : sve_int_perm_rev_revh_z<"revh">;
4345-
def REVW_ZPzZ : sve_int_perm_rev_z<0b11, 0b0110, "revw", ZPR64>;
4346-
def REVD_ZPzZ : sve_int_perm_rev_z<0b00, 0b1110, "revd", ZPR128>;
4342+
defm RBIT_ZPzZ : sve_int_perm_rev_rbit_z<"rbit", AArch64rbit_mt>;
4343+
defm REVB_ZPzZ : sve_int_perm_rev_revb_z<"revb", AArch64revb_mt>;
4344+
defm REVH_ZPzZ : sve_int_perm_rev_revh_z<"revh", AArch64revh_mt>;
4345+
defm REVW_ZPzZ : sve_int_perm_rev_revw_z<"revw", AArch64revw_mt>;
4346+
defm REVD_ZPzZ : sve_int_perm_rev_revd_z<"revd", AArch64revd_mt>;
43474347
} // End HasSME2p2orSVE2p2
43484348

43494349
//===----------------------------------------------------------------------===//

llvm/lib/Target/AArch64/SVEInstrFormats.td

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7621,22 +7621,54 @@ class sve_int_perm_rev_z<bits<2> sz, bits<4> opc, string asm,
76217621
let hasSideEffects = 0;
76227622
}
76237623

7624-
multiclass sve_int_perm_rev_rbit_z<string asm> {
7624+
multiclass sve_int_perm_rev_rbit_z<string asm, SDPatternOperator op> {
76257625
def _B : sve_int_perm_rev_z<0b00, 0b0111, asm, ZPR8>;
76267626
def _H : sve_int_perm_rev_z<0b01, 0b0111, asm, ZPR16>;
76277627
def _S : sve_int_perm_rev_z<0b10, 0b0111, asm, ZPR32>;
76287628
def _D : sve_int_perm_rev_z<0b11, 0b0111, asm, ZPR64>;
7629+
7630+
def : SVE_1_Op_PassthruUndefZero_Pat<nxv16i8, op, nxv16i1, nxv16i8, !cast<Instruction>(NAME # _B)>;
7631+
def : SVE_1_Op_PassthruUndefZero_Pat<nxv8i16, op, nxv8i1, nxv8i16, !cast<Instruction>(NAME # _H)>;
7632+
def : SVE_1_Op_PassthruUndefZero_Pat<nxv4i32, op, nxv4i1, nxv4i32, !cast<Instruction>(NAME # _S)>;
7633+
def : SVE_1_Op_PassthruUndefZero_Pat<nxv2i64, op, nxv2i1, nxv2i64, !cast<Instruction>(NAME # _D)>;
76297634
}
76307635

7631-
multiclass sve_int_perm_rev_revb_z<string asm> {
7636+
multiclass sve_int_perm_rev_revb_z<string asm, SDPatternOperator op> {
76327637
def _H : sve_int_perm_rev_z<0b01, 0b0100, asm, ZPR16>;
76337638
def _S : sve_int_perm_rev_z<0b10, 0b0100, asm, ZPR32>;
76347639
def _D : sve_int_perm_rev_z<0b11, 0b0100, asm, ZPR64>;
7640+
7641+
def : SVE_1_Op_PassthruUndefZero_Pat<nxv8i16, op, nxv8i1, nxv8i16, !cast<Instruction>(NAME # _H)>;
7642+
def : SVE_1_Op_PassthruUndefZero_Pat<nxv4i32, op, nxv4i1, nxv4i32, !cast<Instruction>(NAME # _S)>;
7643+
def : SVE_1_Op_PassthruUndefZero_Pat<nxv2i64, op, nxv2i1, nxv2i64, !cast<Instruction>(NAME # _D)>;
76357644
}
76367645

7637-
multiclass sve_int_perm_rev_revh_z<string asm> {
7646+
multiclass sve_int_perm_rev_revh_z<string asm, SDPatternOperator op> {
76387647
def _S : sve_int_perm_rev_z<0b10, 0b0101, asm, ZPR32>;
76397648
def _D : sve_int_perm_rev_z<0b11, 0b0101, asm, ZPR64>;
7649+
7650+
def : SVE_1_Op_PassthruUndefZero_Pat<nxv4i32, op, nxv4i1, nxv4i32, !cast<Instruction>(NAME # _S)>;
7651+
def : SVE_1_Op_PassthruUndefZero_Pat<nxv2i64, op, nxv2i1, nxv2i64, !cast<Instruction>(NAME # _D)>;
7652+
}
7653+
7654+
multiclass sve_int_perm_rev_revw_z<string asm, SDPatternOperator op> {
7655+
def _D : sve_int_perm_rev_z<0b11, 0b0110, asm, ZPR64>;
7656+
7657+
def : SVE_1_Op_PassthruUndefZero_Pat<nxv2i64, op, nxv2i1, nxv2i64, !cast<Instruction>(NAME # _D)>;
7658+
}
7659+
7660+
multiclass sve_int_perm_rev_revd_z<string asm, SDPatternOperator op> {
7661+
def NAME : sve_int_perm_rev_z<0b00, 0b1110, asm, ZPR128>;
7662+
7663+
def : SVE_1_Op_PassthruUndefZero_Pat<nxv16i8, op, nxv16i1, nxv16i8, !cast<Instruction>(NAME)>;
7664+
def : SVE_1_Op_PassthruUndefZero_Pat<nxv8i16, op, nxv8i1, nxv8i16, !cast<Instruction>(NAME)>;
7665+
def : SVE_1_Op_PassthruUndefZero_Pat<nxv4i32, op, nxv4i1, nxv4i32, !cast<Instruction>(NAME)>;
7666+
def : SVE_1_Op_PassthruUndefZero_Pat<nxv2i64, op, nxv2i1, nxv2i64, !cast<Instruction>(NAME)>;
7667+
7668+
def : SVE_1_Op_PassthruUndefZero_Pat<nxv8bf16, op, nxv8i1, nxv8bf16, !cast<Instruction>(NAME)>;
7669+
def : SVE_1_Op_PassthruUndefZero_Pat<nxv8f16, op, nxv8i1, nxv8f16, !cast<Instruction>(NAME)>;
7670+
def : SVE_1_Op_PassthruUndefZero_Pat<nxv4f32, op, nxv4i1, nxv4f32, !cast<Instruction>(NAME)>;
7671+
def : SVE_1_Op_PassthruUndefZero_Pat<nxv2f64, op, nxv2i1, nxv2f64, !cast<Instruction>(NAME)>;
76407672
}
76417673

76427674
class sve_int_perm_cpy_r<bits<2> sz8_64, string asm, ZPRRegOp zprty,

0 commit comments

Comments
 (0)