http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46925
Summary: Can't optimize degenerate table jumps Product: gcc Version: 4.6.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: rtl-optimization AssignedTo: unassig...@gcc.gnu.org ReportedBy: amona...@gcc.gnu.org For this testcase: http://gcc.gnu.org/bugzilla/attachment.cgi?id=22696 GCC converts the switch to a table jump which is not optimized. -O2 assembly (4.6 trunk r167528): foo: .LFB0: .cfi_startproc xorl %eax, %eax cmpl $4, %edi ja .L2 mov %edi, %edi jmp *.L8(,%rdi,8) .section .rodata .align 8 .align 4 .L8: .quad .L6 .quad .L6 .quad .L6 .quad .L6 .quad .L7 .text .p2align 4,,10 .p2align 3 .L6: movq (%rsi), %rax ret .p2align 4,,10 .p2align 3 .L7: movq (%rsi), %rax .L2: rep ret -Os assembly: foo: .LFB0: .cfi_startproc xorl %eax, %eax cmpl $4, %edi ja .L2 mov %edi, %edi movq (%rsi), %rax jmp *.L8(,%rdi,8) .section .rodata .align 8 .align 4 .L8: .quad .L2 .quad .L2 .quad .L2 .quad .L2 .quad .L2 .text .L2: ret It would be nice if GCC could optimize out the table jump at least at -Os. Does not seem to be a regression, gcc-3.4 and later generate similar code.