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

Reply via email to