https://gcc.gnu.org/bugzilla/show_bug.cgi?id=55190
--- Comment #6 from Oleg Endo <olegendo at gcc dot gnu.org> --- Another example: const char* test (const char* s0, int c, int* rout) { int r = 0; for (int i = 0; i < c; ++i) // r += s0[i]; r += *s0++; *rout = r; return s0; } On SH compiles to: _test: cmp/pl r5 bf .L4 mov r4,r3 // r3 = s0 add r5,r4 // r4 = s0 + c mov r4,r1 // r1 = s0 + c mov #0,r2 sub r3,r1 // r1 = (s0 + c) - s0 = c (d'uh) .align 2 .L3: mov.b @r3+,r7 dt r1 bf/s .L3 add r7,r2 .L2: mov.l r2,@r6 rts mov r4,r0 .align 1 .L4: bra .L2 mov #0,r2