https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101816
Bug ID: 101816 Summary: slight missed optimization with __builtin_add_overflow with ^1 Product: gcc Version: 12.0 Status: UNCONFIRMED Keywords: missed-optimization Severity: enhancement Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: pinskia at gcc dot gnu.org Target Milestone: --- Target: x86_64-linux-gnu Take: void f(unsigned long long *x, unsigned long long y, unsigned long long z) { int d = __builtin_add_overflow (*x,y,x); x[1] += z + !d; } Right now we produce: xorl %eax, %eax addq (%rdi), %rsi setc %al movq %rsi, (%rdi) xorq $1, %rax addq %rdx, %rax addq %rax, 8(%rdi) ret But the setc and xor could be combined into: setnc %al