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))