middle-end/112830 - avoid gimplifying non-default addr-space assign to memcpy
commit68d32d02035fc081384ec6d6fd275e49ffa5d016
authorRichard Biener <rguenther@suse.de>
Mon, 4 Dec 2023 09:35:38 +0000 (4 10:35 +0100)
committerRichard Biener <rguenther@suse.de>
Tue, 5 Dec 2023 13:51:34 +0000 (5 14:51 +0100)
treea56234c183cfaaabd0ebdfcb29a04c03a9abda4f
parent8ff02df62935429d8956361cfdb897122492523d
middle-end/112830 - avoid gimplifying non-default addr-space assign to memcpy

The following avoids turning aggregate copy involving non-default
address-spaces to memcpy since that is not prepared for that.

GIMPLE verification no longer accepts WITH_SIZE_EXPR in aggregate
copies, the following re-allows that for the RHS.  I also needed
to adjust one assert in DCE.

get_memory_address is used for string builtin expansion, so instead
of fixing that up for non-generic address-spaces I've put an assert
there.

I'll note that the same issue exists for initialization from an
empty CTOR which we gimplify to a memset call but since we are
not prepared to handle RTL expansion of the original VLA init and
I failed to provide test coverage (without extending the GNU C
extension for VLA structs) and the Ada frontend (or other frontends)
to not have address-space support the patch instead asserts we only
see generic address-spaces there.

PR middle-end/112830
* gimplify.cc (gimplify_modify_expr): Avoid turning aggregate
copy of non-generic address-spaces to memcpy.
(gimplify_modify_expr_to_memcpy): Assert we are dealing with
a copy inside the generic address-space.
(gimplify_modify_expr_to_memset): Likewise.
* tree-cfg.cc (verify_gimple_assign_single): Allow
WITH_SIZE_EXPR as part of the RHS of an assignment.
* builtins.cc (get_memory_address): Assert we are dealing
with the generic address-space.
* tree-ssa-dce.cc (ref_may_be_aliased): Handle WITH_SIZE_EXPR.

* gcc.target/avr/pr112830.c: New testcase.
* gcc.target/i386/pr112830.c: Likewise.
gcc/builtins.cc
gcc/gimplify.cc
gcc/testsuite/gcc.target/avr/pr112830.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr112830.c [new file with mode: 0644]
gcc/tree-cfg.cc
gcc/tree-ssa-dce.cc