https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63321

--- Comment #3 from Oleg Endo <olegendo at gcc dot gnu.org> ---
A more advanced example:

void test4 (unsigned int x, unsigned int* y)
{
  y[0] = (x >> 0) & 1;
  y[1] = (x >> 1) & 1;
  y[2] = x >> 2;
}

currently compiles to:
        mov     r4,r0
        and     #1,r0
        mov.l   r0,@r5
        mov     r4,r0
        shlr    r0
        and     #1,r0
        shlr2   r4
        mov.l   r0,@(4,r5)
        rts
        mov.l   r4,@(8,r5)

better:
        shlr     r4
        movt     r0
        shlr     r4
        mov.l    r0,@r5
        movt     r1
        mov.l    r4,@(8,r5)
        rts
        mov.l    r1,@(4,r5)

Reply via email to