re PR target/89424 (__builtin_vec_ext_v1ti (v, i) results in ICE with variable i...
authorKelvin Nilsen <kelvin@gcc.gnu.org>
Mon, 6 May 2019 17:00:46 +0000 (17:00 +0000)
committerKelvin Nilsen <kelvin@gcc.gnu.org>
Mon, 6 May 2019 17:00:46 +0000 (17:00 +0000)
gcc/ChangeLog:

2019-05-06  Kelvin Nilsen  <kelvin@gcc.gnu.org>

PR target/89424
* config/rs6000/rs6000.c (rs6000_expand_vector_extract): Add
handling of V1TImode.

gcc/testsuite/ChangeLog:

2019-05-06  Kelvin Nilsen  <kelvin@gcc.gnu.org>

PR target/89424
* gcc.target/powerpc/pr89424-0.c: New test.
* gcc.target/powerpc/vsx-builtin-13a.c: Define macro PR89424 to
enable testing of newly patched capability.
* gcc.target/powerpc/vsx-builtin-13b.c: Likewise.
* gcc.target/powerpc/vsx-builtin-20a.c: Likewise.
* gcc.target/powerpc/vsx-builtin-20b.c: Likewise.

From-SVN: r270918

gcc/ChangeLog
gcc/config/rs6000/rs6000.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/powerpc/pr89424-0.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/vsx-builtin-13a.c
gcc/testsuite/gcc.target/powerpc/vsx-builtin-13b.c
gcc/testsuite/gcc.target/powerpc/vsx-builtin-20a.c
gcc/testsuite/gcc.target/powerpc/vsx-builtin-20b.c

index 493e843417d217f0714f87b5815ce6caa2806489..0422740c56b3b5276b119654fb950c671afb511c 100644 (file)
@@ -1,3 +1,9 @@
+2019-05-06  Kelvin Nilsen  <kelvin@gcc.gnu.org>
+
+       PR target/89424
+       * config/rs6000/rs6000.c (rs6000_expand_vector_extract): Add
+       handling of V1TImode.
+
 2019-05-06  Uroš Bizjak  <ubizjak@gmail.com>
 
        PR target/89221
index c75fd863bdb36050282654a223606453ade9fa23..23db1302715d5e961e7cff592d6b54f72feab9d5 100644 (file)
@@ -6944,6 +6944,10 @@ rs6000_expand_vector_extract (rtx target, rtx vec, rtx elt)
 
       switch (mode)
        {
+       case E_V1TImode:
+         emit_move_insn (target, gen_lowpart (TImode, vec));
+         return;
+
        case E_V2DFmode:
          emit_insn (gen_vsx_extract_v2df_var (target, vec, elt));
          return;
index 1ffdb10d4324e4a5b65cf64a53a2d4b6fd2688fc..d1329c69786fc36c8c347690fdc2911372ad552c 100644 (file)
@@ -1,3 +1,13 @@
+2019-05-06  Kelvin Nilsen  <kelvin@gcc.gnu.org>
+
+       PR target/89424
+       * gcc.target/powerpc/pr89424-0.c: New test.
+       * gcc.target/powerpc/vsx-builtin-13a.c: Define macro PR89424 to
+       enable testing of newly patched capability.
+       * gcc.target/powerpc/vsx-builtin-13b.c: Likewise.
+       * gcc.target/powerpc/vsx-builtin-20a.c: Likewise.
+       * gcc.target/powerpc/vsx-builtin-20b.c: Likewise.
+
 2019-05-06  Marek Polacek  <polacek@redhat.com>
 
        PR c++/90265 - ICE with generic lambda.
diff --git a/gcc/testsuite/gcc.target/powerpc/pr89424-0.c b/gcc/testsuite/gcc.target/powerpc/pr89424-0.c
new file mode 100644 (file)
index 0000000..301cf90
--- /dev/null
@@ -0,0 +1,76 @@
+/* { dg-do run { target { powerpc*-*-* && lp64 } } } */
+/* { dg-require-effective-target vsx_hw } */
+/* { dg-options "-mvsx" } */
+
+/* This test should run the same on any target that supports vsx
+   instructions.  Intentionally not specifying cpu in order to test
+   all code generation paths.  */
+
+#include <altivec.h>
+
+extern void abort (void);
+
+/* Define PR89626 after that pr is addressed.  */
+#ifdef PR89626
+#define SIGNED
+#else
+#define SIGNED signed
+#endif
+
+#define CONST0         (((__int128) 31415926539) << 60)
+
+/* Test that indices > length of vector are applied modulo the vector
+   length.  */
+
+
+/* Test for variable selector and vector residing in register.  */
+__attribute__((noinline))
+__int128 ei (vector SIGNED __int128 v, int i)
+{
+  return __builtin_vec_ext_v1ti (v, i);
+}
+
+/* Test for variable selector and vector residing in memory.  */
+__int128 mei (vector SIGNED __int128 *vp, int i)
+{
+  return __builtin_vec_ext_v1ti (*vp, i);
+}
+
+int main (int argc, char *argv[]) {
+  vector SIGNED __int128 dv = { CONST0 };
+  __int128 d;
+
+  d = ei (dv, 0);
+  if (d != CONST0)
+    abort ();
+
+  d = ei (dv, 1);
+  if (d != CONST0)
+    abort ();
+
+  d = ei (dv, 2);
+  if (d != CONST0)
+    abort ();
+
+  d = ei (dv, 3);
+  if (d != CONST0)
+    abort ();
+
+  d = mei (&dv, 0);
+  if (d != CONST0)
+    abort ();
+
+  d = mei (&dv, 1);
+  if (d != CONST0)
+    abort ();
+
+  d = mei (&dv, 2);
+  if (d != CONST0)
+    abort ();
+
+  d = mei (&dv, 3);
+  if (d != CONST0)
+    abort ();
+
+  return 0;
+}
index 907bcce923660bc76085fcae8d567df5319dfdfc..7dc6bd994e476bd694ab9838990a1fec31d11e24 100644 (file)
@@ -9,7 +9,7 @@
 #include <altivec.h>
 
 /* Define this after PR89424 is addressed.  */
-#undef PR89424
+#define PR89424
 
 /* Define this after PR89626 is addressed.  */
 #undef PR89626
index e1d791ded4f3a8aec015667af7cb949be59d076b..168227214fc1c8ce07198463c41bdab6369886c1 100644 (file)
@@ -9,7 +9,7 @@
 #include <altivec.h>
 
 /* Define this after PR89424 is addressed.  */
-#undef PR89424
+#define PR89424
 
 /* Define this after PR89626 is addressed.  */
 #undef PR89626
index 638f5a1c9044ccb42217c763c68f38dc9a85c952..12350c3ed7a4b81194d5132314badde691540b26 100644 (file)
@@ -9,7 +9,7 @@
 #include <altivec.h>
 
 /* Define this after PR89424 is addressed.  */
-#undef PR89424
+#define PR89424
 
 extern void abort (void);
 
index 7b127a06c7741a65204eca8bf0ef764f165534f4..37fb7133ba0621620f5ad1abfb45e78f25e49e53 100644 (file)
@@ -9,7 +9,7 @@
 #include <altivec.h>
 
 /* Define this after PR89424 is addressed.  */
-#undef PR89424
+#define PR89424
 
 extern void abort (void);