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