https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87913
Bug ID: 87913 Summary: max(n, 1) code generation Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: hoganmeier at gmail dot com Target Milestone: --- unsigned int f(unsigned int num) { return num < 1 ? 1 : num; } int f2(int num) { return num < 1 ? 1 : num; } unsigned int g(unsigned int num) { return num + !num; } $ gcc -O3 f(unsigned int): mov eax, edi test edi, edi mov edx, 1 cmove eax, edx f2(int): test edi, edi mov eax, 1 cmovg eax, edi g(unsigned int): xor eax, eax test edi, edi sete al add eax, edi f and g could be: f: test edi, edi mov eax, 1 cmovne eax, edi g: cmp edi, 1 adc edi, 0 mov eax, edi https://godbolt.org/z/YJWjsQ