Commit 839c480a by Kelvin Nilsen

re PR target/89424 (__builtin_vec_ext_v1ti (v, i) results in ICE with variable i (RS6000))

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
parent cd0a831c
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> 2019-05-06 Uroš Bizjak <ubizjak@gmail.com>
PR target/89221 PR target/89221
......
...@@ -6944,6 +6944,10 @@ rs6000_expand_vector_extract (rtx target, rtx vec, rtx elt) ...@@ -6944,6 +6944,10 @@ rs6000_expand_vector_extract (rtx target, rtx vec, rtx elt)
switch (mode) switch (mode)
{ {
case E_V1TImode:
emit_move_insn (target, gen_lowpart (TImode, vec));
return;
case E_V2DFmode: case E_V2DFmode:
emit_insn (gen_vsx_extract_v2df_var (target, vec, elt)); emit_insn (gen_vsx_extract_v2df_var (target, vec, elt));
return; return;
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> 2019-05-06 Marek Polacek <polacek@redhat.com>
PR c++/90265 - ICE with generic lambda. PR c++/90265 - ICE with generic lambda.
......
/* { 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;
}
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
#include <altivec.h> #include <altivec.h>
/* Define this after PR89424 is addressed. */ /* Define this after PR89424 is addressed. */
#undef PR89424 #define PR89424
/* Define this after PR89626 is addressed. */ /* Define this after PR89626 is addressed. */
#undef PR89626 #undef PR89626
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
#include <altivec.h> #include <altivec.h>
/* Define this after PR89424 is addressed. */ /* Define this after PR89424 is addressed. */
#undef PR89424 #define PR89424
/* Define this after PR89626 is addressed. */ /* Define this after PR89626 is addressed. */
#undef PR89626 #undef PR89626
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
#include <altivec.h> #include <altivec.h>
/* Define this after PR89424 is addressed. */ /* Define this after PR89424 is addressed. */
#undef PR89424 #define PR89424
extern void abort (void); extern void abort (void);
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
#include <altivec.h> #include <altivec.h>
/* Define this after PR89424 is addressed. */ /* Define this after PR89424 is addressed. */
#undef PR89424 #define PR89424
extern void abort (void); extern void abort (void);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment