diff options
author | Richard Earnshaw <rearnsha@arm.com> | 2013-08-08 13:46:28 +0000 |
---|---|---|
committer | Richard Earnshaw <rearnsha@gcc.gnu.org> | 2013-08-08 13:46:28 +0000 |
commit | 27d2e61268434dc682b81227e93ae9022d4d290f (patch) | |
tree | c74cbb02a0e224f62a786e6d19b283646ee1eaf8 | |
parent | 5efc661cc49cf7bd83fc805f91e02eefd44073e1 (diff) | |
download | gcc-27d2e61268434dc682b81227e93ae9022d4d290f.zip gcc-27d2e61268434dc682b81227e93ae9022d4d290f.tar.gz gcc-27d2e61268434dc682b81227e93ae9022d4d290f.tar.bz2 |
re PR target/57431 (ICE in simplify_const_unary_operation vld1_dup_s64/vst1_s64)
PR target/57431
* arm/neon.md (neon_vld1_dupdi): New expand pattern.
(neon_vld1_dup<mode> VD iterator): Iterate over VD not VDX.
From-SVN: r201599
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/arm/neon.md | 25 |
2 files changed, 19 insertions, 12 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5645867..e55b5db 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2013-08-08 Richard Earnshaw <rearnsha@arm.com> + PR target/57431 + * arm/neon.md (neon_vld1_dupdi): New expand pattern. + (neon_vld1_dup<mode> VD iterator): Iterate over VD not VDX. + +2013-08-08 Richard Earnshaw <rearnsha@arm.com> + PR target/56979 * arm.c (aapcs_vfp_allocate): Decompose the argument if the suggested mode for the assignment isn't compatible with the diff --git a/gcc/config/arm/neon.md b/gcc/config/arm/neon.md index e8d2285..627cc71 100644 --- a/gcc/config/arm/neon.md +++ b/gcc/config/arm/neon.md @@ -4593,19 +4593,20 @@ ) (define_insn "neon_vld1_dup<mode>" - [(set (match_operand:VDX 0 "s_register_operand" "=w") - (vec_duplicate:VDX (match_operand:<V_elem> 1 "neon_struct_operand" "Um")))] + [(set (match_operand:VD 0 "s_register_operand" "=w") + (vec_duplicate:VD (match_operand:<V_elem> 1 "neon_struct_operand" "Um")))] "TARGET_NEON" -{ - if (GET_MODE_NUNITS (<MODE>mode) > 1) - return "vld1.<V_sz_elem>\t{%P0[]}, %A1"; - else - return "vld1.<V_sz_elem>\t%h0, %A1"; -} - [(set (attr "neon_type") - (if_then_else (gt (const_string "<V_mode_nunits>") (const_string "1")) - (const_string "neon_vld2_2_regs_vld1_vld2_all_lanes") - (const_string "neon_vld1_1_2_regs")))] + "vld1.<V_sz_elem>\t{%P0[]}, %A1" + [(set_attr "neon_type" "neon_vld2_2_regs_vld1_vld2_all_lanes")] +) + +;; Special case for DImode. Treat it exactly like a simple load. +(define_expand "neon_vld1_dupdi" + [(set (match_operand:DI 0 "s_register_operand" "") + (unspec:DI [(match_operand:DI 1 "neon_struct_operand" "")] + UNSPEC_VLD1))] + "TARGET_NEON" + "" ) (define_insn "neon_vld1_dup<mode>" |