https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98060
Uroš Bizjak <ubizjak at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- Severity|normal |enhancement Last reconfirmed| |2020-11-30 Status|UNCONFIRMED |NEW Ever confirmed|0 |1 --- Comment #1 from Uroš Bizjak <ubizjak at gmail dot com> --- There are several other cases where sbb/adc can be used: --cut here-- int r1 (unsigned v0, unsigned v1, int v2) { return (v0 >= v1) + v2; } int r2 (unsigned v0, unsigned v1, int v2) { return (v1 > v0) + v2; } int r3 (unsigned v0, unsigned v1, int v2) { return (v0 <= v1) + v2; } int r4 (unsigned v0, unsigned v1, int v2) { return (v1 < v0) + v2; } --cut here-- r1 and r3 can be implemented with sbb $-1, reg, r2 and r4 with adc $0, reg. gcc currently converts only r4.