]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR target/89424 (__builtin_vec_ext_v1ti (v, i) results in ICE with varia...
authorKelvin Nilsen <kelvin@gcc.gnu.org>
Mon, 13 May 2019 21:27:29 +0000 (21:27 +0000)
committerKelvin Nilsen <kelvin@gcc.gnu.org>
Mon, 13 May 2019 21:27:29 +0000 (21:27 +0000)
gcc/ChangeLog:

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

Backport from mainline.
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-13  Kelvin Nilsen  <kelvin@gcc.gnu.org>

Backport from mainline.
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: r271137

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 933f1b28efdb7c4c878fc19c74f3040d7a856e18..1eaad758c498412d1192c9d7c5428eb872cd5574 100644 (file)
@@ -1,3 +1,12 @@
+2019-05-13  Kelvin Nilsen  <kelvin@gcc.gnu.org>
+
+       Backport from mainline.
+       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-07  Richard Sandiford  <richard.sandiford@arm.com>
 
        Backport from mainline:
index ca6e2dc4e1ee1dc8fbd8551b3d2eb0a3018bc814..52ff18594d8719edf68522eb2606becf2a199761 100644 (file)
@@ -7705,6 +7705,10 @@ rs6000_expand_vector_extract (rtx target, rtx vec, rtx elt)
 
       switch (mode)
        {
+       case V1TImode:
+         emit_move_insn (target, gen_lowpart (TImode, vec));
+         return;
+
        case V2DFmode:
          emit_insn (gen_vsx_extract_v2df_var (target, vec, elt));
          return;
index 7b2d4657ab3160834429ab48e126221f4ede3944..67b3f93f83d57b14426edf9e16fd6498fe2b0445 100644 (file)
@@ -1,3 +1,16 @@
+2019-05-13  Kelvin Nilsen  <kelvin@gcc.gnu.org>
+
+       Backport from mainline.
+       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-07  Richard Sandiford  <richard.sandiford@arm.com>
 
        Backport from mainline:
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);