https://gcc.gnu.org/bugzilla/show_bug.cgi?id=46932
Wilco <wilco at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |wilco at gcc dot gnu.org
--- Comment #3 from Wilco <wilco at gcc dot gnu.org> ---
(In reply to Ramana Radhakrishnan from comment #1)
> Confirmed - still an issue with gcc trunk and same issue exists on aarch64
>
> ( -fomit-frame-pointer is a red herring).
>
> str x30, [sp, -32]!
> add x1, sp, 32
> strb w0, [x1, -1]!
> mov x0, x1
> bl foo
> ldr x30, [sp], 32
> ret
It's a bug in the auto_inc_dec phase. It shouldn't apply to constant addresses.
If I disable pre-decrement I get the expected:
str x30, [sp, -32]!
strb w0, [sp, 31]
add x0, sp, 31
bl foo3
ldr x30, [sp], 32
ret
Generally pre/post increment should be used when adjusting a pointer in a loop
- besides that there are very few cases where it improves code.