]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
PR target/57431
authorrearnsha <rearnsha@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 8 Aug 2013 13:46:28 +0000 (13:46 +0000)
committerrearnsha <rearnsha@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 8 Aug 2013 13:46:28 +0000 (13:46 +0000)
* arm/neon.md (neon_vld1_dupdi): New expand pattern.
(neon_vld1_dup<mode> VD iterator): Iterate over VD not VDX.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@201599 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/arm/neon.md

index 5645867fc74d9393acecd838528d0295f7f4d877..e55b5db7608e00b521d2012c93a481d2eecfae47 100644 (file)
@@ -1,3 +1,9 @@
+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
index e8d2285fa8126f92472c777bea094caa24fb60bd..627cc71ebc275ad6a9ecb1f852e82794d96a0ef5 100644 (file)
 )
 
 (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>"