]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Arm: MVE: Add mve vec_duplicate pattern
authorAndre Vieira <andre.simoesdiasvieira@arm.com>
Wed, 15 Apr 2020 11:53:46 +0000 (12:53 +0100)
committerAndre Vieira <andre.simoesdiasvieira@arm.com>
Wed, 15 Apr 2020 11:53:46 +0000 (12:53 +0100)
This patch fixes an ICE we were seeing due to a missing vec_duplicate pattern.

gcc/ChangeLog:
2020-04-15  Andre Vieira  <andre.simoesdiasvieira@arm.com>

* config/arm/mve.md (mve_vec_duplicate<mode>): New pattern.
(V_sz_elem2): Remove unused mode attribute.

gcc/testsuite/ChangeLog:
2020-04-15  Andre Vieira <andre.simoesdiasvieira@arm.com>
            Srinath Parvathaneni <srinath.parvathaneni@arm.com>

* gcc.target/arm/mve/intrinsics/mve_vec_duplicate.c: New test.

gcc/ChangeLog
gcc/config/arm/mve.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/arm/mve/intrinsics/mve_vec_duplicate.c [new file with mode: 0644]

index 82e0cd61b00c816cdef5dc17db9058a1be098243..80e21dced64c34099d715fc14e5888c7b4546512 100644 (file)
@@ -1,3 +1,8 @@
+2020-04-15  Andre Vieira  <andre.simoesdiasvieira@arm.com>
+
+       * config/arm/mve.md (mve_vec_duplicate<mode>): New pattern.
+       (V_sz_elem2): Remove unused mode attribute.
+
 2020-04-15  Matthew Malcomson  <matthew.malcomson@arm.com>
 
        * config/arm/arm.md (arm_movdi): Disallow for MVE.
index 7054f7bf0963b41a52ea2c42927c067439789d15..9cb18ef50e8320b2d7160346361343c4ab1685b9 100644 (file)
@@ -17,8 +17,6 @@
 ;; along with GCC; see the file COPYING3.  If not see
 ;; <http://www.gnu.org/licenses/>.
 
-(define_mode_attr V_sz_elem2 [(V16QI "s8") (V8HI "u16") (V4SI "u32")
-                             (V2DI "u64")])
 (define_mode_iterator MVE_types [V16QI V8HI V4SI V2DI TI V8HF V4SF V2DF])
 (define_mode_iterator MVE_VLD_ST [V16QI V8HI V4SI V8HF V4SF])
 (define_mode_iterator MVE_0 [V8HF V4SF])
  [(set_attr "type" "mve_move")
   (set_attr "length" "8")])
 
+(define_insn "*mve_vec_duplicate<mode>"
+ [(set (match_operand:MVE_VLD_ST 0 "s_register_operand" "=w")
+       (vec_duplicate:MVE_VLD_ST (match_operand:<V_elem> 1 "general_operand" "r")))]
+ "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT"
+ "vdup.<V_sz_elem>\t%q0, %1"
+ [(set_attr "type" "mve_move")])
+
 ;; CDE instructions on MVE registers.
 
 (define_insn "arm_vcx1qv16qi"
index 0804bf57457765a488b4dd39b09e633b4556e543..e4fc22197e644700ebe8b448add5c7f74eb4dce0 100644 (file)
@@ -1,3 +1,8 @@
+2020-04-15  Andre Vieira <andre.simoesdiasvieira@arm.com>
+            Srinath Parvathaneni <srinath.parvathaneni@arm.com>
+
+       * gcc.target/arm/mve/intrinsics/mve_vec_duplicate.c: New test.
+
 2020-04-15  Jakub Jelinek  <jakub@redhat.com>
 
        PR c/94593
diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/mve_vec_duplicate.c b/gcc/testsuite/gcc.target/arm/mve/intrinsics/mve_vec_duplicate.c
new file mode 100644 (file)
index 0000000..eda8361
--- /dev/null
@@ -0,0 +1,13 @@
+/* { dg-require-effective-target arm_v8_1m_mve_fp_ok } */
+/* { dg-add-options arm_v8_1m_mve_fp } */
+/* { dg-additional-options "-O2" } */
+
+#include "arm_mve.h"
+
+float32x4_t a;
+
+void foo (void)
+{
+  a = 1.41176471f - 0.47058824f * a;
+}
+