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

Reply via email to