]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
PR/59843 Fix ICE on singleton vector of float on AArch64.
authorAlan Lawrence <alan.lawrence@arm.com>
Thu, 12 Jun 2014 10:13:11 +0000 (10:13 +0000)
committerAlan Lawrence <alalaw01@gcc.gnu.org>
Thu, 12 Jun 2014 10:13:11 +0000 (10:13 +0000)
gcc/ChangeLog:

* config/aarch64/aarch64-modes.def: Add V1DFmode.
* config/aarch64/aarch64.c (aarch64_vector_mode_supported_p):
Support V1DFmode.

gcc/testsuite/ChangeLog:

* gcc.dg/vect/vect-singleton_1.c: New file.

From-SVN: r211502

gcc/ChangeLog
gcc/config/aarch64/aarch64-modes.def
gcc/config/aarch64/aarch64.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/vect/vect-singleton_1.c [new file with mode: 0644]

index 8bbef16f75a9bb90b38df701c1afd83b1ce1d11a..10af9a56c8cc5840ed999449ce9737d97cb459fc 100644 (file)
@@ -1,3 +1,10 @@
+2014-06-10  Alan Lawrence  <alan.lawrence@arm.com>
+
+       PR target/59843
+       * config/aarch64/aarch64-modes.def: Add V1DFmode.
+       * config/aarch64/aarch64.c (aarch64_vector_mode_supported_p):
+       Support V1DFmode.
+
 2014-06-12  Eric Botcazou  <ebotcazou@adacore.com>
 
        * tree-core.h (DECL_NONALIASED): Use proper spelling in comment.
index 1d2cc767946623fc557e2f6518827e40c4df9b73..f9c436948a6f5177761ee1d288809f05a7e841c1 100644 (file)
@@ -31,6 +31,7 @@ VECTOR_MODES (INT, 8);        /*       V8QI V4HI V2SI.  */
 VECTOR_MODES (INT, 16);       /* V16QI V8HI V4SI V2DI.  */
 VECTOR_MODES (FLOAT, 8);      /*                 V2SF.  */
 VECTOR_MODES (FLOAT, 16);     /*            V4SF V2DF.  */
+VECTOR_MODE (FLOAT, DF, 1);   /*                 V1DF.  */
 
 /* Oct Int: 256-bit integer mode needed for 32-byte vector arguments.  */
 INT_MODE (OI, 32);
index f2968fff30b5e4768730d483c43f05982a96e2a2..10fb7de3ba424576700b92291d41672f2d9b59dd 100644 (file)
@@ -7251,7 +7251,8 @@ aarch64_vector_mode_supported_p (enum machine_mode mode)
          || mode == V16QImode || mode == V2DImode
          || mode == V2SImode  || mode == V4HImode
          || mode == V8QImode || mode == V2SFmode
-         || mode == V4SFmode || mode == V2DFmode))
+         || mode == V4SFmode || mode == V2DFmode
+         || mode == V1DFmode))
     return true;
 
   return false;
index 094241acb210ad012f18e47698eba49a5b073235..464c823b80dd1b581cf04ff5227d61d1b0218392 100644 (file)
@@ -1,3 +1,8 @@
+2014-06-10  Alan Lawrence  <alan.lawrence@arm.com>
+
+       PR target/59843
+       * gcc.dg/vect/vect-singleton_1.c: New file.
+
 2014-06-12  Georg-Johann Lay  <avr@gjlay.de>
 
        PR target/61443
diff --git a/gcc/testsuite/gcc.dg/vect/vect-singleton_1.c b/gcc/testsuite/gcc.dg/vect/vect-singleton_1.c
new file mode 100644 (file)
index 0000000..8a4dc81
--- /dev/null
@@ -0,0 +1,76 @@
+/* PR target/59843 ICE on function taking/returning vector of one float64_t.  */
+
+/* { dg-do compile } */
+/* { dg-options "-Warray-bounds -O2 -fno-inline -std=c99" } */
+
+#define TEST(BASETYPE, VECTYPE, SUFFIX)                                             \
+  typedef BASETYPE VECTYPE                                                  \
+      __attribute__ ((__vector_size__ (sizeof (BASETYPE))));                \
+  VECTYPE                                                                   \
+  test_vadd_##SUFFIX (VECTYPE a, VECTYPE b)                                 \
+  {                                                                         \
+    return a + b;                                                           \
+  }                                                                         \
+                                                                            \
+  void                                                                      \
+  test_##SUFFIX (BASETYPE val)                                              \
+  {                                                                         \
+    VECTYPE var = { val };                                                  \
+    BASETYPE v0 = var[0];                                                   \
+    BASETYPE v1 = var[1]; /* { dg-warning "index value is out of bound" } */ \
+  }
+
+TEST (double, float64x1_t, f64)
+
+/* Original bug was for above type;
+   in a nod to completeness, test other types too.  */
+
+TEST (long long, int64x1_t, s64)
+
+TEST (float, float32x1_t, f32)
+
+TEST (long, longx1_t, l)
+
+TEST (int, intx1_t, i)
+
+TEST (short, int16x1_t, s16)
+
+TEST (char, int8x1_t, s8)
+/* PR target/59843 ICE on function taking/returning vector of one float64_t.  */
+
+/* { dg-do compile } */
+/* { dg-options "-Warray-bounds -O2 -fno-inline -std=c99" } */
+
+#define TEST(BASETYPE, VECTYPE, SUFFIX)                                             \
+  typedef BASETYPE VECTYPE                                                  \
+      __attribute__ ((__vector_size__ (sizeof (BASETYPE))));                \
+  VECTYPE                                                                   \
+  test_vadd_##SUFFIX (VECTYPE a, VECTYPE b)                                 \
+  {                                                                         \
+    return a + b;                                                           \
+  }                                                                         \
+                                                                            \
+  void                                                                      \
+  test_##SUFFIX (BASETYPE val)                                              \
+  {                                                                         \
+    VECTYPE var = { val };                                                  \
+    BASETYPE v0 = var[0];                                                   \
+    BASETYPE v1 = var[1]; /* { dg-warning "index value is out of bound" } */ \
+  }
+
+TEST (double, float64x1_t, f64)
+
+/* Original bug was for above type;
+   in a nod to completeness, test other types too.  */
+
+TEST (long long, int64x1_t, s64)
+
+TEST (float, float32x1_t, f32)
+
+TEST (long, longx1_t, l)
+
+TEST (int, intx1_t, i)
+
+TEST (short, int16x1_t, s16)
+
+TEST (char, int8x1_t, s8)