@@ -6097,12 +6097,14 @@ def : Pat<(f64 (uint_to_fp (i64 (vector_extract (v2i64 FPR128:$Rn), (i64 0))))),
6097
6097
// fp16: integer extraction from vector must be at least 32-bits to be legal.
6098
6098
// Actual extraction result is then an in-reg sign-extension of lower 16-bits.
6099
6099
let Predicates = [HasNEONandIsStreamingSafe, HasFullFP16] in {
6100
- def : Pat<(f16 (sint_to_fp (i32 (sext_inreg (i32 (vector_extract (v8i16 FPR128:$Rn), (i64 0))), i16)))),
6101
- (SCVTFv1i16 (f16 (EXTRACT_SUBREG (v8i16 FPR128:$Rn), hsub)))>;
6100
+ def : Pat<(f16 (sint_to_fp (i32 (sext_inreg (i32 (vector_extract
6101
+ (v8i16 FPR128:$Rn), (i64 0))), i16)))),
6102
+ (SCVTFv1i16 (f16 (EXTRACT_SUBREG (v8i16 FPR128:$Rn), hsub)))>;
6102
6103
6103
6104
// unsigned 32-bit extracted element is truncated to 16-bits using AND
6104
- def : Pat<(f16 (uint_to_fp (i32 (and (i32 (vector_extract (v8i16 FPR128:$Rn), (i64 0))), (i32 65535))))),
6105
- (UCVTFv1i16 (f16 (EXTRACT_SUBREG (v8i16 FPR128:$Rn), hsub)))>;
6105
+ def : Pat<(f16 (uint_to_fp (i32 (and (i32 (vector_extract
6106
+ (v8i16 FPR128:$Rn), (i64 0))), (i32 65535))))),
6107
+ (UCVTFv1i16 (f16 (EXTRACT_SUBREG (v8i16 FPR128:$Rn), hsub)))>;
6106
6108
}
6107
6109
6108
6110
// If an integer is about to be converted to a floating point value,
0 commit comments