https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101301
--- Comment #1 from Thomas Koenig <tkoenig at gcc dot gnu.org> --- Here's the assembly for the switch statement with -O3: cmpl $55555, %edi je .L6 jle .L18 movl $8, %eax cmpl $88888, %edi je .L1 jle .L19 xorl %eax, %eax cmpl $99999, %edi sete %al leal (%rax,%rax,8), %eax ret .p2align 4,,10 .p2align 3 .L18: movl $3, %eax cmpl $33333, %edi je .L1 jle .L20 xorl %eax, %eax cmpl $44444, %edi sete %al sall $2, %eax ret .p2align 4,,10 .p2align 3 .L19: movl $6, %eax cmpl $66666, %edi je .L1 xorl %eax, %eax movl $7, %edx cmpl $77777, %edi cmove %edx, %eax ret .p2align 4,,10 .p2align 3 .L6: movl $5, %eax .L1: ret .p2align 4,,10 .p2align 3 .L20: movl $1, %eax cmpl $11111, %edi je .L1 xorl %eax, %eax cmpl $22222, %edi sete %al addl %eax, %eax ret and here for the if statement version: cmpl $55554, %edi jle .L2 cmpl $77776, %edi jle .L3 cmpl $77777, %edi je .L6 cmpl $88888, %edi je .L7 xorl %eax, %eax cmpl $99999, %edi sete %al leal (%rax,%rax,8), %eax ret .p2align 4,,10 .p2align 3 .L3: cmpl $55555, %edi je .L9 xorl %eax, %eax movl $6, %edx cmpl $66666, %edi cmove %edx, %eax ret .p2align 4,,10 .p2align 3 .L2: cmpl $33332, %edi jle .L5 cmpl $33333, %edi je .L11 xorl %eax, %eax cmpl $44444, %edi sete %al sall $2, %eax ret .p2align 4,,10 .p2align 3 .L5: movl $1, %eax cmpl $11111, %edi je .L1 xorl %eax, %eax cmpl $22222, %edi sete %al addl %eax, %eax ret .p2align 4,,10 .p2align 3 .L11: movl $3, %eax .L1: ret .p2align 4,,10 .p2align 3 .L7: movl $8, %eax ret .p2align 4,,10 .p2align 3 .L9: movl $5, %eax ret .p2align 4,,10 .p2align 3 .L6: movl $7, %eax ret Stepping through the code with a debugger, here is a table on the number of conditional jumps for all special values and in all relevant intervals: 5000 5 3 11111 5 3 15000 5 3 22222 5 3 25000 5 3 33333 3 3 35000 4 3 44444 4 3 50000 4 3 55555 1 3 60000 5 3 66666 5 3 70000 5 3 77777 5 3 80000 5 4 88888 3 4 90000 4 4 99999 4 4 100000 4 4 If one assumes each case as equally likely, the number of conditional jumps goes down from 81 to 62. Assuming each case statement is reached once, the total number of conditional jumps executed goes from 35 to 29.