@@ -2082,6 +2082,18 @@ let Predicates = [HasSVEorSME] in {
2082
2082
def : Pat<(i64 (AArch64CttzElts nxv16i1:$Op1)),
2083
2083
(CNTP_XPP_B (BRKB_PPzP (PTRUE_B 31), PPR:$Op1),
2084
2084
(BRKB_PPzP (PTRUE_B 31), PPR:$Op1))>;
2085
+
2086
+ def : Pat<(i64 (AArch64CttzElts nxv8i1:$Op1)),
2087
+ (CNTP_XPP_H (BRKB_PPzP (PTRUE_H 31), PPR:$Op1),
2088
+ (BRKB_PPzP (PTRUE_H 31), PPR:$Op1))>;
2089
+
2090
+ def : Pat<(i64 (AArch64CttzElts nxv4i1:$Op1)),
2091
+ (CNTP_XPP_S (BRKB_PPzP (PTRUE_S 31), PPR:$Op1),
2092
+ (BRKB_PPzP (PTRUE_S 31), PPR:$Op1))>;
2093
+
2094
+ def : Pat<(i64 (AArch64CttzElts nxv2i1:$Op1)),
2095
+ (CNTP_XPP_D (BRKB_PPzP (PTRUE_D 31), PPR:$Op1),
2096
+ (BRKB_PPzP (PTRUE_D 31), PPR:$Op1))>;
2085
2097
}
2086
2098
2087
2099
defm INCB_XPiI : sve_int_pred_pattern_a<0b000, "incb", add, int_aarch64_sve_cntb>;
@@ -2175,6 +2187,30 @@ let Predicates = [HasSVEorSME] in {
2175
2187
(INSERT_SUBREG (IMPLICIT_DEF), GPR32:$Op1, sub_32)),
2176
2188
sub_32)>;
2177
2189
2190
+ def : Pat<(i64 (add GPR64:$Op1, (i64 (AArch64CttzElts nxv8i1:$Op2)))),
2191
+ (INCP_XP_H (BRKB_PPzP (PTRUE_H 31), PPR:$Op2), GPR64:$Op1)>;
2192
+
2193
+ def : Pat<(i32 (add GPR32:$Op1, (trunc (i64 (AArch64CttzElts nxv8i1:$Op2))))),
2194
+ (EXTRACT_SUBREG (INCP_XP_H (BRKB_PPzP (PTRUE_H 31), PPR:$Op2),
2195
+ (INSERT_SUBREG (IMPLICIT_DEF), GPR32:$Op1, sub_32)),
2196
+ sub_32)>;
2197
+
2198
+ def : Pat<(i64 (add GPR64:$Op1, (i64 (AArch64CttzElts nxv4i1:$Op2)))),
2199
+ (INCP_XP_S (BRKB_PPzP (PTRUE_S 31), PPR:$Op2), GPR64:$Op1)>;
2200
+
2201
+ def : Pat<(i32 (add GPR32:$Op1, (trunc (i64 (AArch64CttzElts nxv4i1:$Op2))))),
2202
+ (EXTRACT_SUBREG (INCP_XP_S (BRKB_PPzP (PTRUE_S 31), PPR:$Op2),
2203
+ (INSERT_SUBREG (IMPLICIT_DEF), GPR32:$Op1, sub_32)),
2204
+ sub_32)>;
2205
+
2206
+ def : Pat<(i64 (add GPR64:$Op1, (i64 (AArch64CttzElts nxv2i1:$Op2)))),
2207
+ (INCP_XP_D (BRKB_PPzP (PTRUE_D 31), PPR:$Op2), GPR64:$Op1)>;
2208
+
2209
+ def : Pat<(i32 (add GPR32:$Op1, (trunc (i64 (AArch64CttzElts nxv2i1:$Op2))))),
2210
+ (EXTRACT_SUBREG (INCP_XP_D (BRKB_PPzP (PTRUE_D 31), PPR:$Op2),
2211
+ (INSERT_SUBREG (IMPLICIT_DEF), GPR32:$Op1, sub_32)),
2212
+ sub_32)>;
2213
+
2178
2214
defm INDEX_RR : sve_int_index_rr<"index", AArch64mul_p_oneuse>;
2179
2215
defm INDEX_IR : sve_int_index_ir<"index", AArch64mul_p, AArch64mul_p_oneuse>;
2180
2216
defm INDEX_RI : sve_int_index_ri<"index">;
0 commit comments