On Tue, Jul 2, 2024 at 3:43 PM Georg-Johann Lay <a...@gjlay.de> wrote:
>
> 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?

I think this requires more details on what goes wrong - I assume
it's not stmt reordering that effectively happens but recursive
expand_expr on SSA defs when those invoke libcalls?  In that
case this would point to a deeper issue.

So - if the wrongness is already apparent in the RTL expansion
pass dump can you quote the respective pieces and explain why?

> 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.

Reply via email to