https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67382
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |missed-optimization --- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> --- I don't know what to say, did __builtin_ia32_addcarryx_u32 change represenation on the RTL level? If so then we are getting almost the best code on the trunk: .cfi_startproc subq $24, %rsp .cfi_def_cfa_offset 32 movl $-2, %eax movl %eax, 12(%rsp) cmpl $-2, %eax je .L1 call abort() Note combine is able to figure out the jump is unconditional but there is no "pattern" to match it: Trying 10 -> 17: 10: r85:QI=0x1 17: {flags:CCC=cmp(r85:QI-0x1,r85:QI);clobber scratch;} REG_DEAD r85:QI REG_EQUAL cmp(0,0x1) Failed to match this instruction: (parallel [ (set (pc) (pc)) (clobber (scratch:QI)) ]) Failed to match this instruction: (set (pc) (pc))