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