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)

Reply via email to