https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67732
Oleg Endo <olegendo at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Ever confirmed|0 |1
Last reconfirmed| |2024-09-26
--- Comment #5 from Oleg Endo <olegendo at gcc dot gnu.org> ---
(In reply to Oleg Endo from comment #4)
> (In reply to Kazumoto Kojima from comment #2)
> >
> > void
> > foo (float mat[])
> > {
> > float *p = &mat[16];
> >
> > *--p = 0.0; *--p = 0.0; *--p = 0.0; *--p = 0.0;
> > *--p = 0.0; *--p = 0.0; *--p = 0.0; *--p = 0.0;
> > }
> >
>
> I've just checked this example on the AMS branch..
>
> Without AMS (compiled with -m4-single -ml -O2):
>
> _foo:
> mov r4,r1
> add #60,r1
> fldi0 fr1
> add #32,r4
> fmov.s fr1,@r1
> add #-4,r1
> fmov.s fr1,@r1
> add #-4,r1
> fmov.s fr1,@r1
> add #-4,r1
> fmov.s fr1,@r1
> add #-4,r1
> fmov.s fr1,@r1
> add #-4,r1
> fmov.s fr1,@r1
> add #-4,r1
> fmov.s fr1,@r1
> rts
> fmov.s fr1,@r4
>
It seems this case got even worse at some point.
Trying on the GCC-15 branch https://github.com/olegendo/gcc/tree/devel/sh-lra
gives:
mov r4,r1
add #60,r1
fldi0 fr1
fmov.s fr1,@r1
mov r4,r1
add #56,r1
fmov.s fr1,@r1
mov r4,r1
add #52,r1
fmov.s fr1,@r1
mov r4,r1
add #48,r1
fmov.s fr1,@r1
mov r4,r1
add #44,r1
fmov.s fr1,@r1
mov r4,r1
add #40,r1
fmov.s fr1,@r1
mov r4,r1
add #36,r1
fmov.s fr1,@r1
add #32,r4
rts
fmov.s fr1,@r4