@@ -2042,9 +2042,8 @@ let Predicates = [HasSVEorSME] in {
2042
2042
defm CNTP_XPP : sve_int_pcount_pred<0b0000, "cntp", int_aarch64_sve_cntp>;
2043
2043
2044
2044
def : Pat<(i64 (AArch64CttzElts nxv16i1:$Op1)),
2045
- (i64 (!cast<Instruction>(CNTP_XPP_B)
2046
- (nxv16i1 (!cast<Instruction>(BRKB_PPzP) (PTRUE_B 31), nxv16i1:$Op1)),
2047
- (nxv16i1 (!cast<Instruction>(BRKB_PPzP) (PTRUE_B 31), nxv16i1:$Op1))))>;
2045
+ (CNTP_XPP_B (BRKB_PPzP (PTRUE_B 31), PPR:$Op1),
2046
+ (BRKB_PPzP (PTRUE_B 31), PPR:$Op1))>;
2048
2047
}
2049
2048
2050
2049
defm INCB_XPiI : sve_int_pred_pattern_a<0b000, "incb", add, int_aarch64_sve_cntb>;
@@ -2131,15 +2130,12 @@ let Predicates = [HasSVEorSME] in {
2131
2130
defm DECP_ZP : sve_int_count_v<0b10100, "decp">;
2132
2131
2133
2132
def : Pat<(i64 (add GPR64:$Op1, (i64 (AArch64CttzElts nxv16i1:$Op2)))),
2134
- (i64 (!cast<Instruction>(INCP_XP_B)
2135
- (nxv16i1 (!cast<Instruction>(BRKB_PPzP) (PTRUE_B 31), nxv16i1:$Op2)),
2136
- GPR64:$Op1))>;
2133
+ (INCP_XP_B (BRKB_PPzP (PTRUE_B 31), PPR:$Op2), GPR64:$Op1)>;
2137
2134
2138
2135
def : Pat<(i32 (add GPR32:$Op1, (trunc (i64 (AArch64CttzElts nxv16i1:$Op2))))),
2139
- (i32 (EXTRACT_SUBREG (i64 (!cast<Instruction>(INCP_XP_B)
2140
- (nxv16i1 (!cast<Instruction>(BRKB_PPzP) (PTRUE_B 31), nxv16i1:$Op2)),
2141
- (INSERT_SUBREG (i64 (IMPLICIT_DEF)), GPR32:$Op1, sub_32))),
2142
- sub_32))>;
2136
+ (EXTRACT_SUBREG (INCP_XP_B (BRKB_PPzP (PTRUE_B 31), PPR:$Op2),
2137
+ (INSERT_SUBREG (IMPLICIT_DEF), GPR32:$Op1, sub_32)),
2138
+ sub_32)>;
2143
2139
2144
2140
defm INDEX_RR : sve_int_index_rr<"index", AArch64mul_p_oneuse>;
2145
2141
defm INDEX_IR : sve_int_index_ir<"index", AArch64mul_p, AArch64mul_p_oneuse>;
@@ -2521,9 +2517,9 @@ let Predicates = [HasSVEorSME] in {
2521
2517
(ADDVL_XXI GPR64:$op, $imm)>;
2522
2518
2523
2519
def : Pat<(add GPR32:$op, (i32 (trunc (vscale (sve_rdvl_imm i32:$imm))))),
2524
- (i32 ( EXTRACT_SUBREG (ADDVL_XXI (INSERT_SUBREG (i64 ( IMPLICIT_DEF) ),
2525
- GPR32:$op, sub_32), $imm),
2526
- sub_32) )>;
2520
+ (EXTRACT_SUBREG (ADDVL_XXI (INSERT_SUBREG (IMPLICIT_DEF),
2521
+ GPR32:$op, sub_32), $imm),
2522
+ sub_32)>;
2527
2523
2528
2524
def : Pat<(add GPR64:$op, (vscale (sve_cnth_imm i32:$imm))),
2529
2525
(INCH_XPiI GPR64:$op, 31, $imm)>;
@@ -2540,30 +2536,30 @@ let Predicates = [HasSVEorSME] in {
2540
2536
(DECD_XPiI GPR64:$op, 31, $imm)>;
2541
2537
2542
2538
def : Pat<(add GPR32:$op, (i32 (trunc (vscale (sve_cnth_imm i32:$imm))))),
2543
- (i32 ( EXTRACT_SUBREG (INCH_XPiI (INSERT_SUBREG (i64 ( IMPLICIT_DEF) ),
2544
- GPR32:$op, sub_32), 31, $imm),
2545
- sub_32) )>;
2539
+ (EXTRACT_SUBREG (INCH_XPiI (INSERT_SUBREG (IMPLICIT_DEF),
2540
+ GPR32:$op, sub_32), 31, $imm),
2541
+ sub_32)>;
2546
2542
def : Pat<(add GPR32:$op, (i32 (trunc (vscale (sve_cntw_imm i32:$imm))))),
2547
- (i32 ( EXTRACT_SUBREG (INCW_XPiI (INSERT_SUBREG (i64 ( IMPLICIT_DEF) ),
2548
- GPR32:$op, sub_32), 31, $imm),
2549
- sub_32) )>;
2543
+ (EXTRACT_SUBREG (INCW_XPiI (INSERT_SUBREG (IMPLICIT_DEF),
2544
+ GPR32:$op, sub_32), 31, $imm),
2545
+ sub_32)>;
2550
2546
def : Pat<(add GPR32:$op, (i32 (trunc (vscale (sve_cntd_imm i32:$imm))))),
2551
- (i32 ( EXTRACT_SUBREG (INCD_XPiI (INSERT_SUBREG (i64 ( IMPLICIT_DEF) ),
2552
- GPR32:$op, sub_32), 31, $imm),
2553
- sub_32) )>;
2547
+ (EXTRACT_SUBREG (INCD_XPiI (INSERT_SUBREG (IMPLICIT_DEF),
2548
+ GPR32:$op, sub_32), 31, $imm),
2549
+ sub_32)>;
2554
2550
2555
2551
def : Pat<(add GPR32:$op, (i32 (trunc (vscale (sve_cnth_imm_neg i32:$imm))))),
2556
- (i32 ( EXTRACT_SUBREG (DECH_XPiI (INSERT_SUBREG (i64 ( IMPLICIT_DEF) ),
2557
- GPR32:$op, sub_32), 31, $imm),
2558
- sub_32) )>;
2552
+ (EXTRACT_SUBREG (DECH_XPiI (INSERT_SUBREG (IMPLICIT_DEF),
2553
+ GPR32:$op, sub_32), 31, $imm),
2554
+ sub_32)>;
2559
2555
def : Pat<(add GPR32:$op, (i32 (trunc (vscale (sve_cntw_imm_neg i32:$imm))))),
2560
- (i32 ( EXTRACT_SUBREG (DECW_XPiI (INSERT_SUBREG (i64 ( IMPLICIT_DEF) ),
2561
- GPR32:$op, sub_32), 31, $imm),
2562
- sub_32) )>;
2556
+ (EXTRACT_SUBREG (DECW_XPiI (INSERT_SUBREG (IMPLICIT_DEF),
2557
+ GPR32:$op, sub_32), 31, $imm),
2558
+ sub_32)>;
2563
2559
def : Pat<(add GPR32:$op, (i32 (trunc (vscale (sve_cntd_imm_neg i32:$imm))))),
2564
- (i32 ( EXTRACT_SUBREG (DECD_XPiI (INSERT_SUBREG (i64 ( IMPLICIT_DEF) ),
2565
- GPR32:$op, sub_32), 31, $imm),
2566
- sub_32) )>;
2560
+ (EXTRACT_SUBREG (DECD_XPiI (INSERT_SUBREG (IMPLICIT_DEF),
2561
+ GPR32:$op, sub_32), 31, $imm),
2562
+ sub_32)>;
2567
2563
}
2568
2564
2569
2565
// FIXME: BigEndian requires an additional REV instruction to satisfy the
@@ -3266,58 +3262,58 @@ let Predicates = [HasSVEorSME] in {
3266
3262
// Extract element from vector with immediate index that's within the bottom 128-bits.
3267
3263
let Predicates = [IsNeonAvailable], AddedComplexity = 1 in {
3268
3264
def : Pat<(i32 (vector_extract (nxv16i8 ZPR:$vec), VectorIndexB:$index)),
3269
- (i32 ( UMOVvi8 (v16i8 (EXTRACT_SUBREG ZPR:$vec, zsub)), VectorIndexB:$index) )>;
3265
+ (UMOVvi8 (v16i8 (EXTRACT_SUBREG ZPR:$vec, zsub)), VectorIndexB:$index)>;
3270
3266
def : Pat<(i32 (vector_extract (nxv8i16 ZPR:$vec), VectorIndexH:$index)),
3271
- (i32 ( UMOVvi16 (v8i16 (EXTRACT_SUBREG ZPR:$vec, zsub)), VectorIndexH:$index) )>;
3267
+ (UMOVvi16 (v8i16 (EXTRACT_SUBREG ZPR:$vec, zsub)), VectorIndexH:$index)>;
3272
3268
def : Pat<(i32 (vector_extract (nxv4i32 ZPR:$vec), VectorIndexS:$index)),
3273
- (i32 ( UMOVvi32 (v4i32 (EXTRACT_SUBREG ZPR:$vec, zsub)), VectorIndexS:$index) )>;
3269
+ (UMOVvi32 (v4i32 (EXTRACT_SUBREG ZPR:$vec, zsub)), VectorIndexS:$index)>;
3274
3270
def : Pat<(i64 (vector_extract (nxv2i64 ZPR:$vec), VectorIndexD:$index)),
3275
- (i64 ( UMOVvi64 (v2i64 (EXTRACT_SUBREG ZPR:$vec, zsub)), VectorIndexD:$index) )>;
3271
+ (UMOVvi64 (v2i64 (EXTRACT_SUBREG ZPR:$vec, zsub)), VectorIndexD:$index)>;
3276
3272
} // End IsNeonAvailable
3277
3273
3278
3274
let Predicates = [IsNeonAvailable] in {
3279
3275
def : Pat<(sext_inreg (vector_extract (nxv16i8 ZPR:$vec), VectorIndexB:$index), i8),
3280
- (i32 ( SMOVvi8to32 (v16i8 (EXTRACT_SUBREG ZPR:$vec, zsub)), VectorIndexB:$index) )>;
3276
+ (SMOVvi8to32 (v16i8 (EXTRACT_SUBREG ZPR:$vec, zsub)), VectorIndexB:$index)>;
3281
3277
def : Pat<(sext_inreg (anyext (i32 (vector_extract (nxv16i8 ZPR:$vec), VectorIndexB:$index))), i8),
3282
- (i64 ( SMOVvi8to64 (v16i8 (EXTRACT_SUBREG ZPR:$vec, zsub)), VectorIndexB:$index) )>;
3278
+ (SMOVvi8to64 (v16i8 (EXTRACT_SUBREG ZPR:$vec, zsub)), VectorIndexB:$index)>;
3283
3279
3284
3280
def : Pat<(sext_inreg (vector_extract (nxv8i16 ZPR:$vec), VectorIndexH:$index), i16),
3285
- (i32 ( SMOVvi16to32 (v8i16 (EXTRACT_SUBREG ZPR:$vec, zsub)), VectorIndexH:$index) )>;
3281
+ (SMOVvi16to32 (v8i16 (EXTRACT_SUBREG ZPR:$vec, zsub)), VectorIndexH:$index)>;
3286
3282
def : Pat<(sext_inreg (anyext (i32 (vector_extract (nxv8i16 ZPR:$vec), VectorIndexH:$index))), i16),
3287
- (i64 ( SMOVvi16to64 (v8i16 (EXTRACT_SUBREG ZPR:$vec, zsub)), VectorIndexH:$index) )>;
3283
+ (SMOVvi16to64 (v8i16 (EXTRACT_SUBREG ZPR:$vec, zsub)), VectorIndexH:$index)>;
3288
3284
3289
3285
def : Pat<(sext (i32 (vector_extract (nxv4i32 ZPR:$vec), VectorIndexS:$index))),
3290
- (i64 ( SMOVvi32to64 (v4i32 (EXTRACT_SUBREG ZPR:$vec, zsub)), VectorIndexS:$index) )>;
3286
+ (SMOVvi32to64 (v4i32 (EXTRACT_SUBREG ZPR:$vec, zsub)), VectorIndexS:$index)>;
3291
3287
} // End IsNeonAvailable
3292
3288
3293
3289
// Extract first element from vector.
3294
3290
let AddedComplexity = 2 in {
3295
- def : Pat<(vector_extract (nxv16i8 ZPR:$Zs), (i64 0)),
3296
- (i32 ( EXTRACT_SUBREG ZPR:$Zs, ssub) )>;
3297
- def : Pat<(vector_extract (nxv8i16 ZPR:$Zs), (i64 0)),
3298
- (i32 ( EXTRACT_SUBREG ZPR:$Zs, ssub) )>;
3299
- def : Pat<(vector_extract (nxv4i32 ZPR:$Zs), (i64 0)),
3300
- (i32 ( EXTRACT_SUBREG ZPR:$Zs, ssub) )>;
3301
- def : Pat<(vector_extract (nxv2i64 ZPR:$Zs), (i64 0)),
3302
- (i64 ( EXTRACT_SUBREG ZPR:$Zs, dsub) )>;
3303
- def : Pat<(vector_extract (nxv8f16 ZPR:$Zs), (i64 0)),
3304
- (f16 ( EXTRACT_SUBREG ZPR:$Zs, hsub) )>;
3305
- def : Pat<(vector_extract (nxv4f16 ZPR:$Zs), (i64 0)),
3306
- (f16 ( EXTRACT_SUBREG ZPR:$Zs, hsub) )>;
3307
- def : Pat<(vector_extract (nxv2f16 ZPR:$Zs), (i64 0)),
3308
- (f16 ( EXTRACT_SUBREG ZPR:$Zs, hsub) )>;
3309
- def : Pat<(vector_extract (nxv8bf16 ZPR:$Zs), (i64 0)),
3310
- (bf16 ( EXTRACT_SUBREG ZPR:$Zs, hsub) )>;
3311
- def : Pat<(vector_extract (nxv4bf16 ZPR:$Zs), (i64 0)),
3312
- (bf16 ( EXTRACT_SUBREG ZPR:$Zs, hsub) )>;
3313
- def : Pat<(vector_extract (nxv2bf16 ZPR:$Zs), (i64 0)),
3314
- (bf16 ( EXTRACT_SUBREG ZPR:$Zs, hsub) )>;
3315
- def : Pat<(vector_extract (nxv4f32 ZPR:$Zs), (i64 0)),
3316
- (f32 ( EXTRACT_SUBREG ZPR:$Zs, ssub) )>;
3317
- def : Pat<(vector_extract (nxv2f32 ZPR:$Zs), (i64 0)),
3318
- (f32 ( EXTRACT_SUBREG ZPR:$Zs, ssub) )>;
3319
- def : Pat<(vector_extract (nxv2f64 ZPR:$Zs), (i64 0)),
3320
- (f64 ( EXTRACT_SUBREG ZPR:$Zs, dsub) )>;
3291
+ def : Pat<(i32 ( vector_extract (nxv16i8 ZPR:$Zs), (i64 0) )),
3292
+ (EXTRACT_SUBREG ZPR:$Zs, ssub)>;
3293
+ def : Pat<(i32 ( vector_extract (nxv8i16 ZPR:$Zs), (i64 0) )),
3294
+ (EXTRACT_SUBREG ZPR:$Zs, ssub)>;
3295
+ def : Pat<(i32 ( vector_extract (nxv4i32 ZPR:$Zs), (i64 0) )),
3296
+ (EXTRACT_SUBREG ZPR:$Zs, ssub)>;
3297
+ def : Pat<(i64 ( vector_extract (nxv2i64 ZPR:$Zs), (i64 0) )),
3298
+ (EXTRACT_SUBREG ZPR:$Zs, dsub)>;
3299
+ def : Pat<(f16 ( vector_extract (nxv8f16 ZPR:$Zs), (i64 0) )),
3300
+ (EXTRACT_SUBREG ZPR:$Zs, hsub)>;
3301
+ def : Pat<(f16 ( vector_extract (nxv4f16 ZPR:$Zs), (i64 0) )),
3302
+ (EXTRACT_SUBREG ZPR:$Zs, hsub)>;
3303
+ def : Pat<(f16 ( vector_extract (nxv2f16 ZPR:$Zs), (i64 0) )),
3304
+ (EXTRACT_SUBREG ZPR:$Zs, hsub)>;
3305
+ def : Pat<(bf16 ( vector_extract (nxv8bf16 ZPR:$Zs), (i64 0) )),
3306
+ (EXTRACT_SUBREG ZPR:$Zs, hsub)>;
3307
+ def : Pat<(bf16 ( vector_extract (nxv4bf16 ZPR:$Zs), (i64 0) )),
3308
+ (EXTRACT_SUBREG ZPR:$Zs, hsub)>;
3309
+ def : Pat<(bf16 ( vector_extract (nxv2bf16 ZPR:$Zs), (i64 0) )),
3310
+ (EXTRACT_SUBREG ZPR:$Zs, hsub)>;
3311
+ def : Pat<(f32 ( vector_extract (nxv4f32 ZPR:$Zs), (i64 0) )),
3312
+ (EXTRACT_SUBREG ZPR:$Zs, ssub)>;
3313
+ def : Pat<(f32 ( vector_extract (nxv2f32 ZPR:$Zs), (i64 0) )),
3314
+ (EXTRACT_SUBREG ZPR:$Zs, ssub)>;
3315
+ def : Pat<(f64 ( vector_extract (nxv2f64 ZPR:$Zs), (i64 0) )),
3316
+ (EXTRACT_SUBREG ZPR:$Zs, dsub)>;
3321
3317
}
3322
3318
3323
3319
multiclass sve_predicated_add<SDNode extend, int value> {
0 commit comments