https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95441
Bug ID: 95441
Summary: Failure to reuse flag from float compare
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: ---
int f(double x)
{
return (x < 0) - (x > 0);
}
With -Ofast, GCC outputs this :
f(double):
pxor xmm1, xmm1
xor eax, eax
comisd xmm1, xmm0
seta al
xor edx, edx
comisd xmm0, xmm1
seta dl
sub eax, edx
ret
LLVM outputs this :
f(double):
xorpd xmm1, xmm1
xor eax, eax
xor ecx, ecx
ucomisd xmm0, xmm1
setb al
seta cl
sub eax, ecx
ret