[gcc/devel/omp/gcc-9] backport: re PR target/89424 (__builtin_vec_ext_v1ti (v, i) results in ICE with variable i (RS6000))
Tobias Burnus
burnus@gcc.gnu.org
Thu Mar 5 13:45:00 GMT 2020
https://gcc.gnu.org/g:38ff331a385baf480d85514276e51a8ac2ed8c48
commit 38ff331a385baf480d85514276e51a8ac2ed8c48
Author: Kelvin Nilsen <kelvin@gcc.gnu.org>
Date: Tue May 7 16:22:21 2019 +0000
backport: re PR target/89424 (__builtin_vec_ext_v1ti (v, i) results in ICE with variable i (RS6000))
gcc/ChangeLog:
2019-05-07 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-07 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: r270969
Diff:
---
gcc/ChangeLog | 9 +++
gcc/config/rs6000/rs6000.c | 4 ++
gcc/testsuite/ChangeLog | 13 ++++
gcc/testsuite/gcc.target/powerpc/pr89424-0.c | 76 ++++++++++++++++++++++
gcc/testsuite/gcc.target/powerpc/vsx-builtin-13a.c | 2 +-
gcc/testsuite/gcc.target/powerpc/vsx-builtin-13b.c | 2 +-
gcc/testsuite/gcc.target/powerpc/vsx-builtin-20a.c | 2 +-
gcc/testsuite/gcc.target/powerpc/vsx-builtin-20b.c | 2 +-
8 files changed, 106 insertions(+), 4 deletions(-)
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b1659d3..b7791f1 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2019-05-07 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-06 Martin Liska <mliska@suse.cz>
Backport from mainline
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index f0de18d..5950698 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -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;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 17828a3..e5ad345 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,16 @@
+2019-05-07 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-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
index 0000000..301cf90
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/pr89424-0.c
@@ -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;
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-13a.c b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-13a.c
index 907bcce..7dc6bd9 100644
--- a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-13a.c
+++ b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-13a.c
@@ -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
diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-13b.c b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-13b.c
index e1d791d..1682272 100644
--- a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-13b.c
+++ b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-13b.c
@@ -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
diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-20a.c b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-20a.c
index 638f5a1..12350c3 100644
--- a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-20a.c
+++ b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-20a.c
@@ -9,7 +9,7 @@
#include <altivec.h>
/* Define this after PR89424 is addressed. */
-#undef PR89424
+#define PR89424
extern void abort (void);
diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-20b.c b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-20b.c
index 7b127a0..37fb713 100644
--- a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-20b.c
+++ b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-20b.c
@@ -9,7 +9,7 @@
#include <altivec.h>
/* Define this after PR89424 is addressed. */
-#undef PR89424
+#define PR89424
extern void abort (void);
More information about the Gcc-cvs
mailing list