http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44249



Steven Bosscher <steven at gcc dot gnu.org> changed:



           What    |Removed                     |Added

----------------------------------------------------------------------------

            Summary|[4.6/4.7/4.8 Regression]    |[4.6/4.7 Regression] IRA

                   |IRA generates extra         |generates extra register

                   |register move               |move



--- Comment #5 from Steven Bosscher <steven at gcc dot gnu.org> 2012-10-09 
21:01:08 UTC ---

No extra move with trunk today:



$ cat t.c

extern unsigned long table[];



unsigned long foo(unsigned char *p) {

    unsigned long tag = *p;

    return table[tag >> 4] + table[tag & 0xf];

}



$ cat t.s

        .file   "t.c"

        .text

        .p2align 4,,15

        .globl  foo

        .type   foo, @function

foo:

.LFB0:

        .cfi_startproc

        movzbl  (%rdi), %edx

        movq    %rdx, %rax

        shrq    $4, %rdx

        andl    $15, %eax

        movq    table(,%rax,8), %rax

        addq    table(,%rdx,8), %rax

        ret

        .cfi_endproc

.LFE0:

        .size   foo, .-foo

        .ident  "GCC: (GNU) 4.8.0 20121008 (experimental) \

[trunk revision 192219]"

        .section        .note.GNU-stack,"",@progbits

Reply via email to