diff options
Diffstat (limited to 'lib/Target/AArch64/AArch64InstrNEON.td')
-rw-r--r-- | lib/Target/AArch64/AArch64InstrNEON.td | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/lib/Target/AArch64/AArch64InstrNEON.td b/lib/Target/AArch64/AArch64InstrNEON.td index 81371be066..251fee2af2 100644 --- a/lib/Target/AArch64/AArch64InstrNEON.td +++ b/lib/Target/AArch64/AArch64InstrNEON.td @@ -6888,15 +6888,10 @@ def : Pat<(v4i32 (scalar_to_vector GPR32:$Rn)), def : Pat<(v2i64 (scalar_to_vector GPR64:$Rn)), (INSdx (v2i64 (IMPLICIT_DEF)), $Rn, (i64 0))>; -def : Pat<(v2i32 (scalar_to_vector GPR32:$Rn)), - (v2i32 (EXTRACT_SUBREG (v16i8 - (INSsw (v4i32 (IMPLICIT_DEF)), $Rn, (i64 0))), - sub_64))>; - -def : Pat<(v2i32 (scalar_to_vector GPR32:$Rn)), - (v2i32 (EXTRACT_SUBREG (v16i8 - (INSsw (v4i32 (IMPLICIT_DEF)), $Rn, (i64 0))), - sub_64))>; +def : Pat<(v2f32 (scalar_to_vector (f32 FPR32:$Rn))), + (SUBREG_TO_REG (i64 0), FPR32:$Rn, sub_32)>; +def : Pat<(v4f32 (scalar_to_vector (f32 FPR32:$Rn))), + (SUBREG_TO_REG (i64 0), FPR32:$Rn, sub_32)>; def : Pat<(v1f64 (scalar_to_vector (f64 FPR64:$Rn))), (v1f64 FPR64:$Rn)>; @@ -7063,6 +7058,11 @@ defm : Concat_Vector_Pattern<v2i64, v1i64>; defm : Concat_Vector_Pattern<v4f32, v2f32>; defm : Concat_Vector_Pattern<v2f64, v1f64>; +def : Pat<(v2i32 (concat_vectors (v1i32 FPR32:$Rn), (v1i32 FPR32:$Rn))), + (DUPELT2s (v4i32 (SUBREG_TO_REG(i64 0), $Rn, sub_32)), 0)>; +def : Pat<(v2i32 (concat_vectors undef, (v1i32 FPR32:$Rn))), + (DUPELT2s (v4i32 (SUBREG_TO_REG(i64 0), $Rn, sub_32)), 0)>; + //patterns for EXTRACT_SUBVECTOR def : Pat<(v8i8 (extract_subvector (v16i8 VPR128:$Rn), (i64 0))), (v8i8 (EXTRACT_SUBREG VPR128:$Rn, sub_64))>; |