@@ -247,11 +247,6 @@ def HasSMEF16F16orSMEF8F16
247
247
def HasNEONandIsStreamingSafe
248
248
: Predicate<"Subtarget->hasNEON()">,
249
249
AssemblerPredicateWithAll<(any_of FeatureNEON), "neon">;
250
- // A subset of NEON instructions legal in Streaming SVE mode with +sme2p2.
251
- // TODO: Change to check for hasSME2p2() once FEAT_SME2p2 is implemented.
252
- def HasNEONandIsSME2p2StreamingSafe
253
- : Predicate<"Subtarget->isNeonAvailable()">,
254
- AssemblerPredicateWithAll<(any_of FeatureNEON), "neon">;
255
250
def HasRCPC : Predicate<"Subtarget->hasRCPC()">,
256
251
AssemblerPredicateWithAll<(all_of FeatureRCPC), "rcpc">;
257
252
def HasAltNZCV : Predicate<"Subtarget->hasAlternativeNZCV()">,
@@ -6242,7 +6237,8 @@ def : Pat<(v2f64 (AArch64frsqrts (v2f64 FPR128:$Rn), (v2f64 FPR128:$Rm))),
6242
6237
// Some float -> int -> float conversion patterns for which we want to keep the
6243
6238
// int values in FP registers using the corresponding NEON instructions to
6244
6239
// avoid more costly int <-> fp register transfers.
6245
- let Predicates = [HasNEONandIsSME2p2StreamingSafe] in {
6240
+ // TODO: Allow these in streaming[-compatible] functions with +sme2p2.
6241
+ let Predicates = [HasNEON] in {
6246
6242
def : Pat<(f64 (any_sint_to_fp (i64 (any_fp_to_sint f64:$Rn)))),
6247
6243
(SCVTFv1i64 (i64 (FCVTZSv1i64 f64:$Rn)))>;
6248
6244
def : Pat<(f32 (any_sint_to_fp (i32 (any_fp_to_sint f32:$Rn)))),
@@ -6252,7 +6248,7 @@ def : Pat<(f64 (any_uint_to_fp (i64 (any_fp_to_uint f64:$Rn)))),
6252
6248
def : Pat<(f32 (any_uint_to_fp (i32 (any_fp_to_uint f32:$Rn)))),
6253
6249
(UCVTFv1i32 (i32 (FCVTZUv1i32 f32:$Rn)))>;
6254
6250
6255
- let Predicates = [HasNEONandIsSME2p2StreamingSafe , HasFullFP16] in {
6251
+ let Predicates = [HasNEON , HasFullFP16] in {
6256
6252
def : Pat<(f16 (any_sint_to_fp (i32 (any_fp_to_sint f16:$Rn)))),
6257
6253
(SCVTFv1i16 (f16 (FCVTZSv1f16 f16:$Rn)))>;
6258
6254
def : Pat<(f16 (any_uint_to_fp (i32 (any_fp_to_uint f16:$Rn)))),
@@ -6275,7 +6271,7 @@ def : Pat<(f64 (uint_to_fp (i64 (vector_extract (v2i64 FPR128:$Rn), (i64 0))))),
6275
6271
6276
6272
// fp16: integer extraction from vector must be at least 32-bits to be legal.
6277
6273
// Actual extraction result is then an in-reg sign-extension of lower 16-bits.
6278
- let Predicates = [HasNEONandIsSME2p2StreamingSafe , HasFullFP16] in {
6274
+ let Predicates = [HasNEON , HasFullFP16] in {
6279
6275
def : Pat<(f16 (sint_to_fp (i32 (sext_inreg (i32 (vector_extract
6280
6276
(v8i16 FPR128:$Rn), (i64 0))), i16)))),
6281
6277
(SCVTFv1i16 (f16 (EXTRACT_SUBREG (v8i16 FPR128:$Rn), hsub)))>;
@@ -6372,7 +6368,7 @@ def : Pat <(f64 (uint_to_fp (i32
6372
6368
(LDURSi GPR64sp:$Rn, simm9:$offset), ssub))>;
6373
6369
// 64-bits -> double are handled in target specific dag combine:
6374
6370
// performIntToFpCombine.
6375
- } // let Predicates = [HasNEONandIsSME2p2StreamingSafe ]
6371
+ } // let Predicates = [HasNEON ]
6376
6372
6377
6373
//===----------------------------------------------------------------------===//
6378
6374
// Advanced SIMD three different-sized vector instructions.
0 commit comments