https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86438
--- Comment #2 from Uroš Bizjak <ubizjak at gmail dot com> --- Here is what happens: compare operators in (insn 66) are substituted with their defs from (insn 64) and (insn 14). The CC mode is calculated from SELECT_CC_MODE, which really returns CCCmode. The flags reg clobber is substituted with the compare, and insn then matches {*adddi3_cc_overflow_1}. Unfortunately, the compare is not correct. %rax from (insn 14) is already updated, and should not be compared with its previous value from (insn 64).