https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84527
Bug ID: 84527 Summary: missed optimization for special ternary operation Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: rtl-optimization Assignee: unassigned at gcc dot gnu.org Reporter: ktietz at gcc dot gnu.org Target Milestone: --- The following sample: int foo(int a, int b) { return a < b ? -1 : 1; } gets translated to ... xorl %eax, %eax cmpl %edx, %ecx setge %al leal -1(%rax,%rax), %eax ret ... There would be instead a better representation for such kind of patterns as ... cmpl %ecx, %edx sbb %eax, %eax orb $1, %al ret The missed patterns are 'result = COND ? -1 : VAL' and its permutations. The same applies to the pattern 'result = COND ? VAL : 0' and its permuations, which can be expressed as 'CMP a, b; SBB reg, reg; AND $VAL, reg;'