diff options
author | Richard Biener <rguenther@suse.de> | 2020-10-21 14:28:45 -0500 |
---|---|---|
committer | Peter Bergner <bergner@linux.ibm.com> | 2020-10-21 14:29:43 -0500 |
commit | 84cc3370d6d5972fe495b2114fb32f7b4a49a98d (patch) | |
tree | db269646b4dedc0aa679f1e33b825e647f7fe9da /gcc | |
parent | caaa218f912ccf932fdb79243ded68bb462bbe63 (diff) | |
download | gcc-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.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/powerpc/pr97360.c | 18 |
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]); + } +} |