On Tue, 14 Jul 2026, Jakub Jelinek wrote:

> On Mon, Jul 13, 2026 at 01:00:33PM +0200, Jakub Jelinek wrote:
> > On Mon, Jul 13, 2026 at 06:23:48PM +0800, H.J. Lu wrote:
> > > Have you run your proposed change with the test included in my patch?
> > 
> > Yes.  It fixed it.
> 
> Here is full patch I've bootstrapped/regtested on x86_64-linux and
> i686-linux.
> 
> I've tweaked the testcase a little bit too, to avoid includes and
> more importantly only compile the single function with -march=x86-64-v4,
> so that main doesn't try to use any extra insns from that ISA by
> accident.
> 
> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

OK.

Thanks,
Richard.

> 2026-07-14  Jakub Jelinek  <[email protected]>
>           H.J. Lu <[email protected]>
> 
>       PR tree-optimization/120201
>       * cfgexpand.cc (expand_used_vars): Set data.asan_alignb to
>       maximum of itself and crtl->stack_alignment_needed
>       / BITS_PER_UNIT.
> 
>       * g++.dg/asan/pr120201-1.C: New test.
> 
> Signed-off-by: H.J. Lu <[email protected]>
> 
> --- gcc/cfgexpand.cc.jj       2026-06-25 18:11:41.632407668 +0200
> +++ gcc/cfgexpand.cc  2026-07-13 13:00:02.521190628 +0200
> @@ -2676,6 +2676,9 @@ expand_used_vars (bitmap forced_stack_va
>         HOST_WIDE_INT offset, sz, redzonesz;
>         redzonesz = ASAN_RED_ZONE_SIZE;
>         sz = data.asan_vec[0] - prev_offset;
> +       data.asan_alignb = MAX (data.asan_alignb,
> +                               crtl->stack_alignment_needed
> +                               / BITS_PER_UNIT);
>         if (data.asan_alignb > ASAN_RED_ZONE_SIZE
>             && data.asan_alignb <= 4096
>             && sz + ASAN_RED_ZONE_SIZE >= (int) data.asan_alignb)
> 
> --- gcc/testsuite/g++.dg/asan/pr120201-1.C.jj
> +++ gcc/testsuite/g++.dg/asan/pr120201-1.C
> @@ -0,0 +1,42 @@
> +// { dg-do run }
> +// { dg-options "-O3 -std=c++23 -fsanitize=address" }
> +
> +using size_t = decltype (sizeof 0);
> +
> +float* shaderLightData;
> +
> +using ShaderShadowTransform = float[4z * 4z * 6z];
> +using Transform = float[4 * 4];
> +
> +__attribute__ ((noipa))
> +#if defined(__i386__) || defined(__x86_64__)
> +__attribute__ ((target ("arch=x86-64-v4")))
> +#endif
> +static void
> +do_test (void)
> +{
> +  int lightCount = 3;
> +  ShaderShadowTransform* shaderShadowData = new 
> ShaderShadowTransform[lightCount];
> +  for (int index = 0; index < lightCount; index++)
> +    {
> +      Transform transforms[6];
> +
> +      const size_t matSize = 4z * 4z;
> +      float* transformBlockStart = shaderShadowData[index];
> +      for (int face = 0; face < 6; face++)
> +     __builtin_memcpy(transformBlockStart + (matSize * face),
> +                      &transforms[face][0], matSize * sizeof(float));
> +  }
> +
> +  delete [] shaderShadowData;
> +}
> +
> +int
> +main (void)
> +{
> +#if defined(__i386__) || defined(__x86_64__)
> +  if (__builtin_cpu_supports ("x86-64-v4"))
> +#endif
> +    do_test ();
> +  return 0;
> +}
> 
> 
>       Jakub
> 
> 

-- 
Richard Biener <[email protected]>
SUSE Software Solutions Germany GmbH,
Frankenstrasse 146, 90461 Nuernberg, Germany;
GF: Jochen Jaser, Andrew McDonald; (HRB 36809, AG Nuernberg)

Reply via email to