aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2020-10-21 14:28:45 -0500
committerPeter Bergner <bergner@linux.ibm.com>2020-10-21 14:29:43 -0500
commit84cc3370d6d5972fe495b2114fb32f7b4a49a98d (patch)
treedb269646b4dedc0aa679f1e33b825e647f7fe9da /gcc
parentcaaa218f912ccf932fdb79243ded68bb462bbe63 (diff)
downloadgcc-84cc3370d6d5972fe495b2114fb32f7b4a49a98d.zip
gcc-84cc3370d6d5972fe495b2114fb32f7b4a49a98d.tar.gz
gcc-84cc3370d6d5972fe495b2114fb32f7b4a49a98d.tar.bz2
rs6000: MMA type causes an ICE in ranger pass due to incompatible types
PR97360 shows a problem in how we create our PXI and POI modes that cause an ICE in the ranger pass. The problem seems to be that the extra call to build_distinct_type_copy() also creates new TYPE_{MIN,MAX}_VALUEs that are not compatible/the same as the base type itself. The simple "fix" is to actually remove the unneeded build_distinct_type_copy(), since according to richi, the types returned from make_unsigned_type() are already distinct. gcc/ 2020-10-21 Richard Biener <rguenther@suse.de> PR target/97360 * config/rs6000/rs6000-call.c (rs6000_init_builtins): Remove call to build_distinct_type_copy(). gcc/testsuite/ 2020-10-21 Martin Liska <mliska@suse.cz> PR target/97360 * gcc.target/powerpc/pr97360.c: New test. Co-authored-by: Andrew MacLeod <amacleod@redhat.com> Co-authored-by: Martin Liska <mliska@suse.cz>
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/rs6000/rs6000-call.c6
-rw-r--r--gcc/testsuite/gcc.target/powerpc/pr97360.c18
2 files changed, 20 insertions, 4 deletions
diff --git a/gcc/config/rs6000/rs6000-call.c b/gcc/config/rs6000/rs6000-call.c
index 9fdf97b..7639aab 100644
--- a/gcc/config/rs6000/rs6000-call.c
+++ b/gcc/config/rs6000/rs6000-call.c
@@ -12914,15 +12914,13 @@ rs6000_init_builtins (void)
/* Vector pair and vector quad support. */
if (TARGET_EXTRA_BUILTINS)
{
- tree oi_uns_type = make_unsigned_type (256);
- vector_pair_type_node = build_distinct_type_copy (oi_uns_type);
+ vector_pair_type_node = make_unsigned_type (256);
SET_TYPE_MODE (vector_pair_type_node, POImode);
layout_type (vector_pair_type_node);
lang_hooks.types.register_builtin_type (vector_pair_type_node,
"__vector_pair");
- tree xi_uns_type = make_unsigned_type (512);
- vector_quad_type_node = build_distinct_type_copy (xi_uns_type);
+ vector_quad_type_node = make_unsigned_type (512);
SET_TYPE_MODE (vector_quad_type_node, PXImode);
layout_type (vector_quad_type_node);
lang_hooks.types.register_builtin_type (vector_quad_type_node,
diff --git a/gcc/testsuite/gcc.target/powerpc/pr97360.c b/gcc/testsuite/gcc.target/powerpc/pr97360.c
new file mode 100644
index 0000000..2328d28
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/pr97360.c
@@ -0,0 +1,18 @@
+/* PR target/97360 */
+/* { dg-do compile } */
+/* { dg-require-effective-target power10_ok } */
+/* { dg-options "-O2 -mdejagnu-cpu=power10" } */
+
+/* Verify we do not ICE on the test below. */
+
+typedef unsigned char vec_t __attribute__((vector_size(16)));
+
+void
+foo (__vector_quad *dst, __vector_pair *vpair, vec_t *vec)
+{
+ __vector_quad acc = *dst;
+ for (;;)
+ {
+ __builtin_mma_xvf64gerpp(&acc, *vpair, vec[7]);
+ }
+}