...just noticed that disabling -ftree-ter would also fix PR53049 where it moves a volatile asm across a library call.
Am 02.07.24 um 15:42 schrieb Georg-Johann Lay:
Hi Jeff, This is a patch to get correct code out of 64-bit loads from address-space __memx. The AVR address-spaces may require that move insns issue calls to library support functions, a fact that -ftree-ter doesn't account for. tree-ssa-ter.cc then replaces an expression across such a library call, resulting in wrong code. This patch disables that pass per default on avr, as there is no more fine grained way to avoid malicious optimizations. The pass can still be re-enabled by means of explicit -ftree-ter. Ok to apply? As an alternative, the option could be disabled permanently in avr.cc::avr_option_override(). Johann -- AVR: middle-end/87376 - Use -fno-tree-ter per default. Temporary expression replacement might replace expressions across library calls, for example with move insn from address-space __memx like in PR87376. -ftree-ter has no way where the backend could hook in to avoid only problematic replacements, thus kick it out altogether. PR middle-end/87376 gcc/ * common/config/avr/avr-common.cc (avr_option_optimization_table) <OPT_ftree_ter>: Set to 0. gcc/testsuite/ * gcc.target/avr/torture/pr87376-memx.c: New test.