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.

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