[Bug target/95914] New: Failure to optimize saturated add properly
gabravier at gmail dot com
gcc-bugzilla@gcc.gnu.org
Fri Jun 26 14:26:39 GMT 2020
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95914
Bug ID: 95914
Summary: Failure to optimize saturated add properly
Product: gcc
Version: 11.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: gabravier at gmail dot com
Target Milestone: ---
uint16_t add16(uint16_t a, uint16_t b)
{
uint16_t c = a + b;
return c < a ? -1 : c;
}
With -O3, LLVM outputs this on x86 :
add16(unsigned short, unsigned short):
add di, si
mov eax, 65535
cmovae eax, edi
ret
GCC outputs this :
add16(unsigned short, unsigned short):
xor eax, eax
add si, di
jc .L8
.L2:
test ax, ax
mov eax, -1
cmove eax, esi
ret
.L8:
mov eax, 1
jmp .L2
I don't know if this doesn't also occur on also architectures but the output
seems rather crippled on x86, at least.
More information about the Gcc-bugs
mailing list