From: rearnsha Date: Thu, 8 Aug 2013 13:46:28 +0000 (+0000) Subject: PR target/57431 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ad504e501cb508851dfce33dcf69e854ded3edcf;p=thirdparty%2Fgcc.git PR target/57431 * arm/neon.md (neon_vld1_dupdi): New expand pattern. (neon_vld1_dup VD iterator): Iterate over VD not VDX. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@201599 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5645867fc74d..e55b5db7608e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2013-08-08 Richard Earnshaw + + PR target/57431 + * arm/neon.md (neon_vld1_dupdi): New expand pattern. + (neon_vld1_dup VD iterator): Iterate over VD not VDX. + 2013-08-08 Richard Earnshaw PR target/56979 diff --git a/gcc/config/arm/neon.md b/gcc/config/arm/neon.md index e8d2285fa812..627cc71ebc27 100644 --- a/gcc/config/arm/neon.md +++ b/gcc/config/arm/neon.md @@ -4593,19 +4593,20 @@ ) (define_insn "neon_vld1_dup" - [(set (match_operand:VDX 0 "s_register_operand" "=w") - (vec_duplicate:VDX (match_operand: 1 "neon_struct_operand" "Um")))] + [(set (match_operand:VD 0 "s_register_operand" "=w") + (vec_duplicate:VD (match_operand: 1 "neon_struct_operand" "Um")))] "TARGET_NEON" -{ - if (GET_MODE_NUNITS (mode) > 1) - return "vld1.\t{%P0[]}, %A1"; - else - return "vld1.\t%h0, %A1"; -} - [(set (attr "neon_type") - (if_then_else (gt (const_string "") (const_string "1")) - (const_string "neon_vld2_2_regs_vld1_vld2_all_lanes") - (const_string "neon_vld1_1_2_regs")))] + "vld1.\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"