Current GCC generates:
test2: .LFB0: .cfi_startproc xorl %edx, %edx cmpl $3, (%rdi) jle .L1 movl 16(%rdi), %eax cmpl $1, %eax je .L4 subl $2, %eax cmpl $4, %eax ja .L1 movl CSWTCH.1(,%rax,4), %edx .L1: movl %edx, %eax ret .p2align 4,,10 .p2align 3 .L4: movl $12, %edx jmp .L1 .cfi_endproc .LFE0: .size test2, .-test2 .section .rodata .align 16 .type CSWTCH.1, @object .size CSWTCH.1, 20 CSWTCH.1: .long 27 .long 38 .long 18 .long 58 .long 68 With the patch attatched: test2: .LFB0: .cfi_startproc xorl %edx, %edx cmpl $3, (%rdi) jle .L1 movl 16(%rdi), %eax subl $1, %eax cmpl $5, %eax jbe .L6 .L1: movl %edx, %eax ret .p2align 4,,10 .p2align 3 .L6: movl CSWTCH.1(,%rax,4), %edx movl %edx, %eax ret .cfi_endproc .LFE0: .size test2, .-test2 .section .rodata .align 16 .type CSWTCH.1, @object .size CSWTCH.1, 24 CSWTCH.1: .long 12 .long 27 .long 38 .long 18 .long 58 .long 68 Bootstrap and regression tested pass on x86_64-linux-gnu, OK for master?
0001-if-to-switch-Don-t-skip-the-first-condition-bb-when-.patch
Description: Binary data