https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82662
Bug ID: 82662 Summary: ifcvt is not performed on double-word compare Product: gcc Version: 8.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: rtl-optimization Assignee: unassigned at gcc dot gnu.org Reporter: ubizjak at gmail dot com Target Milestone: --- Following testcase: int foo (__int128 a, __int128 b) { return a < b; } compiles to: movq %rsi, %r10 cmpq %rdx, %rdi movl $1, %eax sbbq %rcx, %r10 jl .L2 xorl %eax, %eax .L2: rep ret For some reason ifcvt is not performed, although the candidate is detected in ce1 pass: 8: NOTE_INSN_FUNCTION_BEG 11: r95:SI=0x1 12: {flags:CCGZ=cmp(r89:TI,r93:TI);clobber scratch;} REG_DEAD r93:TI REG_DEAD r89:TI 13: pc={(flags:CCGZ<0)?L15:pc} REG_DEAD flags:CCGZ REG_BR_PROB 536870912 23: NOTE_INSN_BASIC_BLOCK 3 14: r95:SI=0 15: L15: 24: NOTE_INSN_BASIC_BLOCK 4 20: ax:SI=r95:SI REG_DEAD r95:SI 21: use ax:SI IF-THEN-JOIN block found, pass 1, test 2, then 3, join 4 ========== no more changes 1 possible IF blocks searched. 0 IF blocks converted. 0 true changes made.