https://gcc.gnu.org/bugzilla/show_bug.cgi?id=55190
Oleg Endo <olegendo at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- See Also| |https://gcc.gnu.org/bugzill | |a/show_bug.cgi?id=62233, | |https://gcc.gnu.org/bugzill | |a/show_bug.cgi?id=60537 --- Comment #11 from Oleg Endo <olegendo at gcc dot gnu.org> --- And still on SH, but now with AMS optimization: char* test_func_00 (char* p, int c, int x) { do { *--p = (char)x; *--p = (char)x; *--p = (char)x; } while (--c); return p; } Results in: mov r5,r7 mov.l .L6,r1 add r7,r7 mov r7,r2 add r5,r2 mul.l r1,r2 mov r4,r3 exts.b r6,r6 add #-3,r3 sts macl,r0 .align 2 .L2: mov r3,r2 add #3,r2 mov.b r6,@-r2 dt r0 mov.b r6,@-r2 mov.b r6,@r3 mov r2,r3 bf/s .L2 add #-4,r3 add r5,r7 mov r4,r0 rts sub r7,r0 .L7: .align 2 .L6: .long -1431655765 And with -fno-ivopts we're getting something what one would expect: exts.b r6,r6 mov r4,r1 mov r5,r2 .align 2 .L2: mov.b r6,@-r1 dt r2 mov.b r6,@-r1 bf/s .L2 mov.b r6,@-r1 mov r5,r0 shll2 r0 sub r0,r5 mov r4,r0 rts add r5,r0