https://gcc.gnu.org/g:1d1b64a5bdcf2a9352479fb9f6f399ac2e5b8a98
commit r17-1164-g1d1b64a5bdcf2a9352479fb9f6f399ac2e5b8a98 Author: Richard Biener <[email protected]> Date: Wed Apr 29 09:19:43 2026 +0200 tree-optimization/120702 - avoid folding loads to STRING_CSTs The following avoids (large) string duplication which can happen when folding aggregate reads to STRING_CSTs. There's unlikely to be followup optimization opportunities. PR tree-optimization/120702 * gimple-fold.cc (maybe_fold_reference): Only fold register type reads. * gcc.dg/tree-ssa/pr120702.c: New testcase. Diff: --- gcc/gimple-fold.cc | 5 +++++ gcc/testsuite/gcc.dg/tree-ssa/pr120702.c | 25 +++++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/gcc/gimple-fold.cc b/gcc/gimple-fold.cc index dbe16bcb8117..1ceb5aa5fba7 100644 --- a/gcc/gimple-fold.cc +++ b/gcc/gimple-fold.cc @@ -306,6 +306,11 @@ maybe_fold_reference (tree expr) { tree result = NULL_TREE; + /* Avoid expensive fold_const_aggregate_ref early on aggregate loads + and esp. replacing STRING_CSTs inline. */ + if (!is_gimple_reg_type (TREE_TYPE (expr))) + return NULL_TREE; + if ((TREE_CODE (expr) == VIEW_CONVERT_EXPR || TREE_CODE (expr) == REALPART_EXPR || TREE_CODE (expr) == IMAGPART_EXPR) diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr120702.c b/gcc/testsuite/gcc.dg/tree-ssa/pr120702.c new file mode 100644 index 000000000000..fb0f8f73a732 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr120702.c @@ -0,0 +1,25 @@ +/* { dg-do compile } */ +/* { dg-options "-Os -fdump-tree-optimized" } */ + +extern void *memcpy(void *, const void *, __SIZE_TYPE__); +extern int memcmp(const void *, const void *, __SIZE_TYPE__); + +static const unsigned char orig[10] + = { 'J', '2', 'O', 'Z', 'F', '5', '0', 'F', 'Y', 'L' }; + +static unsigned char test[10]; + +int +verify (void) +{ + return 0 == memcmp (test, orig, 10 * sizeof (orig[0])); +} + +int +benchmark (void) +{ + memcpy (test, orig, 10 * sizeof (orig[0])); + return 0; +} + +/* { dg-final { scan-tree-dump-not " = \"J2OZF50FYL\";" "optimized" } } */
