@@ -2421,39 +2421,40 @@ let Predicates = [HasSVEorSME] in {
2421
2421
defm FSQRT_ZPmZ : sve_fp_2op_p_zd_HSD<0b01101, "fsqrt", AArch64fsqrt_mt>;
2422
2422
} // End HasSVEorSME
2423
2423
2424
- // Helper for creating fp -> int -> fp conversions using SVE.
2425
- class sve_fp_int_fp_cvt<Instruction PTRUE, Instruction FROM_INT, Instruction TO_INT, SubRegIndex sub>
2424
+ // Helper for creating scalar fp -> int -> fp conversions using SVE.
2425
+ class sve_scalar_fp_int_fp_cvt
2426
+ <Instruction PTRUE, Instruction FROM_INT, Instruction TO_INT, SubRegIndex sub>
2426
2427
: OutPatFrag<(ops node: $Rn),
2427
2428
(EXTRACT_SUBREG
2428
2429
(FROM_INT (IMPLICIT_DEF), (PTRUE 1),
2429
2430
(TO_INT (IMPLICIT_DEF), (PTRUE 1),
2430
2431
(INSERT_SUBREG (IMPLICIT_DEF), $Rn, sub))), sub)>;
2431
2432
2432
- // Some float -> int -> float conversion patterns where we want to keep the int
2433
- // values in FP registers using the SVE instructions to avoid costly GPR <-> FPR
2434
- // register transfers. Only used when NEON is not available (e.g. in streaming
2435
- // functions).
2436
- // TODO: When +sme2p2 is available single-element vectors should be preferred.
2433
+ // Some scalar float -> int -> float conversion patterns where we want to keep
2434
+ // the int values in FP registers to avoid costly GPR <-> FPR register
2435
+ // transfers using SVE instructions . Only used when NEON is not available (e.g.
2436
+ // in streaming functions).
2437
+ // TODO: When +sme2p2 is available Neon single-element vectors should be preferred.
2437
2438
def HasNoNEON : Predicate<"!Subtarget->isNeonAvailable()">;
2438
2439
let Predicates = [HasSVEorSME, HasNoNEON] in {
2439
2440
def : Pat<
2440
2441
(f64 (sint_to_fp (i64 (fp_to_sint f64:$Rn)))),
2441
- (sve_fp_int_fp_cvt <PTRUE_D, SCVTF_ZPmZ_DtoD, FCVTZS_ZPmZ_DtoD, dsub> $Rn)>;
2442
+ (sve_scalar_fp_int_fp_cvt <PTRUE_D, SCVTF_ZPmZ_DtoD, FCVTZS_ZPmZ_DtoD, dsub> $Rn)>;
2442
2443
def : Pat<
2443
2444
(f64 (uint_to_fp (i64 (fp_to_uint f64:$Rn)))),
2444
- (sve_fp_int_fp_cvt <PTRUE_D, UCVTF_ZPmZ_DtoD, FCVTZU_ZPmZ_DtoD, dsub> $Rn)>;
2445
+ (sve_scalar_fp_int_fp_cvt <PTRUE_D, UCVTF_ZPmZ_DtoD, FCVTZU_ZPmZ_DtoD, dsub> $Rn)>;
2445
2446
def : Pat<
2446
2447
(f32 (sint_to_fp (i32 (fp_to_sint f32:$Rn)))),
2447
- (sve_fp_int_fp_cvt <PTRUE_S, SCVTF_ZPmZ_StoS, FCVTZS_ZPmZ_StoS, ssub> $Rn)>;
2448
+ (sve_scalar_fp_int_fp_cvt <PTRUE_S, SCVTF_ZPmZ_StoS, FCVTZS_ZPmZ_StoS, ssub> $Rn)>;
2448
2449
def : Pat<
2449
2450
(f32 (uint_to_fp (i32 (fp_to_uint f32:$Rn)))),
2450
- (sve_fp_int_fp_cvt <PTRUE_S, UCVTF_ZPmZ_StoS, FCVTZU_ZPmZ_StoS, ssub> $Rn)>;
2451
+ (sve_scalar_fp_int_fp_cvt <PTRUE_S, UCVTF_ZPmZ_StoS, FCVTZU_ZPmZ_StoS, ssub> $Rn)>;
2451
2452
def : Pat<
2452
2453
(f16 (sint_to_fp (i32 (fp_to_sint f16:$Rn)))),
2453
- (sve_fp_int_fp_cvt <PTRUE_H, SCVTF_ZPmZ_HtoH, FCVTZS_ZPmZ_HtoH, hsub> $Rn)>;
2454
+ (sve_scalar_fp_int_fp_cvt <PTRUE_H, SCVTF_ZPmZ_HtoH, FCVTZS_ZPmZ_HtoH, hsub> $Rn)>;
2454
2455
def : Pat<
2455
2456
(f16 (uint_to_fp (i32 (fp_to_uint f16:$Rn)))),
2456
- (sve_fp_int_fp_cvt <PTRUE_H, UCVTF_ZPmZ_HtoH, FCVTZU_ZPmZ_HtoH, hsub> $Rn)>;
2457
+ (sve_scalar_fp_int_fp_cvt <PTRUE_H, UCVTF_ZPmZ_HtoH, FCVTZU_ZPmZ_HtoH, hsub> $Rn)>;
2457
2458
} // End HasSVEorSME, HasNoNEON
2458
2459
2459
2460
let Predicates = [HasBF16, HasSVEorSME] in {
0 commit comments