On Wed, 15 Jan 2025, Tamar Christina wrote: > Hi All, > > In g:3c32575e5b6370270d38a80a7fa8eaa144e083d0 I made a mistake and incorrectly > replaced the type of the arguments of an expression with the type of the > expression. This is of course wrong. > > This reverts that change and I have also double checked the other replacements > and they are fine. > > Bootstrapped Regtested on aarch64-none-linux-gnu, > arm-none-linux-gnueabihf, x86_64-pc-linux-gnu > -m32, -m64 and no issues. > > Ok for master?
OK. Richard. > gcc/ChangeLog: > > PR middle-end/118472 > * fold-const.cc (operand_compare::operand_equal_p): Fix incorrect > replacement. > > gcc/testsuite/ChangeLog: > > PR middle-end/118472 > * gcc.dg/pr118472.c: New test. > > --- > diff --git a/gcc/fold-const.cc b/gcc/fold-const.cc > index > 501c6d8a54dbc97e4cd6f6804bb11c2411cc4129..f9f7f4d2f917235a2ffef67c363b3cfb8c1694f9 > 100644 > --- a/gcc/fold-const.cc > +++ b/gcc/fold-const.cc > @@ -3746,7 +3746,8 @@ operand_compare::operand_equal_p (tree type0, > const_tree arg0, > of op1. Need to check to make sure they are the same. */ > if (TREE_CODE (TREE_OPERAND (arg0, 1)) == INTEGER_CST > && TREE_CODE (TREE_OPERAND (arg1, 1)) == INTEGER_CST > - && TYPE_PRECISION (type0) != TYPE_PRECISION (type1)) > + && TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (arg0, 1))) > + != TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (arg1, 1)))) > return false; > /* FALLTHRU */ > > diff --git a/gcc/testsuite/gcc.dg/pr118472.c b/gcc/testsuite/gcc.dg/pr118472.c > new file mode 100644 > index > 0000000000000000000000000000000000000000..dd842a6ae0fedd7e5e1505bb846267eb25e3e14a > --- /dev/null > +++ b/gcc/testsuite/gcc.dg/pr118472.c > @@ -0,0 +1,32 @@ > +/* { dg-do compile } */ > +/* { dg-options "-O3 -fopenmp-simd" } */ > + > +typedef int a; > +typedef struct { > + a b __attribute__((__vector_size__(8))); > +} c; > + > +typedef a d __attribute__((__vector_size__(8))); > +c e, f, g; > +d h, j; > +void k() { > + c l; > + l.b[1] = 0; > + c m = l; > + __builtin_memcpy(&h, &m, sizeof(h)); > + j = h; > + { > + c l; > + l.b[1] = 0; > + m = l; > + __builtin_memcpy(&h, &m, sizeof(h)); > + d m = j; > + __builtin_memcpy(&g, &m, sizeof(g)); > + e = g; > + m = h; > + __builtin_memcpy(&g, &m, sizeof(g)); > +#pragma omp simd > + for (long i = 0; i < f.b[0]; i++) > + f.b[i] = e.b[i] > g.b[i]; > + } > +} > > > > > -- Richard Biener <rguent...@suse.de> SUSE Software Solutions Germany GmbH, Frankenstrasse 146, 90461 Nuernberg, Germany; GF: Ivo Totev, Andrew McDonald, Werner Knoblich; (HRB 36809, AG Nuernberg)