https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109483
--- Comment #5 from Andrew Pinski <pinskia at gcc dot gnu.org> --- (In reply to Uroš Bizjak from comment #4) > Even the above is not optimal. I'd expect: > > ... > .L8: > #APP > # 6 "t.c" 1 > int3 > # 0 "" 2 > #NO_APP > je .L2 > xorl %eax, %eax > ret IF-CASE-2 found, start 3, else 5 verify found no changes in insn with uid = 15. changing bb of uid 4 from 5 to 3 deleting block 5 Conversion succeeded on pass 1. Adding -fno-if-conversion gets what you want too. But I am not 100% sure if it is "better".