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