On Thu, Oct 30, 2025 at 6:09 AM Andrew Pinski
<[email protected]> wrote:
>
> So in the end I agree with Richi's comment at
> https://gcc.gnu.org/pipermail/gcc-patches/2025-October/698856.html:
> > I see.  I wonder whether it would be better to leave 
> > __builtin_assume_aligned
> > around then, because that inherently introduces the copy and it would show 
> > why.
> > TER / SSA coalescing might make a mess our of the copies you leave in place
> > anyway, no?
>
> This leaves __builtin_assume_aligned around.
> Will also push the revert of r16-4637-g8590b32deac05e along side this.

OK.  Let's see what problems this will cause ;)

> gcc/ChangeLog:
>
>         * gimple-fold.cc (gimple_fold_builtin_assume_aligned): Remove.
>         (gimple_fold_builtin): Don't fold __builtin_assume_aligned
>
> gcc/testsuite/ChangeLog:
>
>         * c-c++-common/ubsan/align-5.c: Xfail.
>         * gcc.dg/pr107389.c: Move to...
>         * gcc.dg/torture/pr107389.c: ...here. Skip for lto.
>         * gcc.dg/builtin-assume-aligned-1.c: Instead of
>         testing for deleting of assume-align, test for
>         the alignment/misalignment. Also disable the
>         vectorizer.
>
> Signed-off-by: Andrew Pinski <[email protected]>
> ---
>  gcc/gimple-fold.cc                            | 21 -------------------
>  gcc/testsuite/c-c++-common/ubsan/align-5.c    |  4 +++-
>  .../gcc.dg/builtin-assume-aligned-1.c         | 10 +++++++--
>  gcc/testsuite/gcc.dg/{ => torture}/pr107389.c |  3 ++-
>  4 files changed, 13 insertions(+), 25 deletions(-)
>  rename gcc/testsuite/gcc.dg/{ => torture}/pr107389.c (73%)
>
> diff --git a/gcc/gimple-fold.cc b/gcc/gimple-fold.cc
> index edcc04adc08..8f72dbb929b 100644
> --- a/gcc/gimple-fold.cc
> +++ b/gcc/gimple-fold.cc
> @@ -5233,24 +5233,6 @@ gimple_fold_builtin_constant_p (gimple_stmt_iterator 
> *gsi)
>    return true;
>  }
>
> -/* Fold __builtin_assume_aligned builtin.  */
> -
> -static bool
> -gimple_fold_builtin_assume_aligned (gimple_stmt_iterator *gsi)
> -{
> -  if (!fold_before_rtl_expansion_p ())
> -    return false;
> -
> -  gcall *call = as_a<gcall*>(gsi_stmt (*gsi));
> -
> -  if (gimple_call_num_args (call) < 2)
> -    return false;
> -
> -  gimplify_and_update_call_from_tree (gsi, gimple_call_arg (call, 0));
> -
> -  return true;
> -}
> -
>  /* If va_list type is a simple pointer and nothing special is needed,
>     optimize __builtin_va_start (&ap, 0) into ap = __builtin_next_arg (0),
>     __builtin_va_end (&ap) out as NOP and __builtin_va_copy into a simple
> @@ -5548,9 +5530,6 @@ gimple_fold_builtin (gimple_stmt_iterator *gsi)
>      case BUILT_IN_CONSTANT_P:
>        return gimple_fold_builtin_constant_p (gsi);
>
> -    case BUILT_IN_ASSUME_ALIGNED:
> -      return gimple_fold_builtin_assume_aligned (gsi);
> -
>      default:;
>      }
>
> diff --git a/gcc/testsuite/c-c++-common/ubsan/align-5.c 
> b/gcc/testsuite/c-c++-common/ubsan/align-5.c
> index 484790134a6..6d2ac26612b 100644
> --- a/gcc/testsuite/c-c++-common/ubsan/align-5.c
> +++ b/gcc/testsuite/c-c++-common/ubsan/align-5.c
> @@ -11,4 +11,6 @@ foo (char *p)
>    return *q;
>  }
>
> -/* { dg-final { scan-assembler "__ubsan_handle" } } */
> +/* xfail, see PR 122038 as __builtin_assume_aligned should be instrumented 
> instead
> +   of only the load. */
> +/* { dg-final { scan-assembler "__ubsan_handle" { xfail *-*-* } } } */
> diff --git a/gcc/testsuite/gcc.dg/builtin-assume-aligned-1.c 
> b/gcc/testsuite/gcc.dg/builtin-assume-aligned-1.c
> index a74eccee4ab..01aa884d0bc 100644
> --- a/gcc/testsuite/gcc.dg/builtin-assume-aligned-1.c
> +++ b/gcc/testsuite/gcc.dg/builtin-assume-aligned-1.c
> @@ -1,5 +1,5 @@
>  /* { dg-do compile } */
> -/* { dg-options "-O3 -fdump-tree-optimized" } */
> +/* { dg-options "-O3 -fno-tree-vectorize -fdump-tree-optimized-alias" } */
>
>  void
>  test1 (double *out1, double *out2, double *out3, double *in1,
> @@ -19,6 +19,8 @@ test1 (double *out1, double *out2, double *out3, double 
> *in1,
>      }
>  }
>
> +/* { dg-final { scan-tree-dump-times " ALIGN = 16, MISALIGN = 0" 5 
> "optimized" } } */
> +
>  void
>  test2 (double *out1, double *out2, double *out3, double *in1,
>         double *in2, int len)
> @@ -37,4 +39,8 @@ test2 (double *out1, double *out2, double *out3, double 
> *in1,
>      }
>  }
>
> -/* { dg-final { scan-tree-dump-not "__builtin_assume_aligned" "optimized" } 
> } */
> +
> +/* { dg-final { scan-tree-dump-times " ALIGN = 32" 5 "optimized" } } */
> +/* { dg-final { scan-tree-dump-times " ALIGN = 32, MISALIGN = 16" 4 
> "optimized" } } */
> +/* { dg-final { scan-tree-dump-times " ALIGN = 32, MISALIGN = 0" 1 
> "optimized" } } */
> +
> diff --git a/gcc/testsuite/gcc.dg/pr107389.c 
> b/gcc/testsuite/gcc.dg/torture/pr107389.c
> similarity index 73%
> rename from gcc/testsuite/gcc.dg/pr107389.c
> rename to gcc/testsuite/gcc.dg/torture/pr107389.c
> index deb63380704..23c2776ab73 100644
> --- a/gcc/testsuite/gcc.dg/pr107389.c
> +++ b/gcc/testsuite/gcc.dg/torture/pr107389.c
> @@ -1,5 +1,6 @@
>  /* { dg-do compile } */
> -/* { dg-options "-fdump-tree-optimized-alias" } */
> +/* { dg-skip-if "" { *-*-* } { "-flto" } { "" } } */
> +/* { dg-additional-options "-fdump-tree-optimized-alias" } */
>
>  unsigned foo (void *p)
>  {
> --
> 2.43.0
>

Reply via email to