[Bug middle-end/88575] New: gcc got confused by different comparison operators
bugzilla@poradnik-webmastera.com
gcc-bugzilla@gcc.gnu.org
Sat Dec 22 10:50:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88575
Bug ID: 88575
Summary: gcc got confused by different comparison operators
Product: gcc
Version: 9.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: middle-end
Assignee: unassigned at gcc dot gnu.org
Reporter: bugzilla@poradnik-webmastera.com
Target Milestone: ---
In test() gcc is not able to determine that for a==b it does not have to
evaluate 2nd comparison and can use value of a if 1st comparison is true. When
operators are swapped like in test2() or are the same, code is optimized.
[code]
double test(double a, double b)
{
if (a <= b)
return a < b ? a : b;
return 0.0;
}
double test2(double a, double b)
{
if (a < b)
return a <= b ? a : b;
return 0.0;
}
[/code]
[asm]
test(double, double):
vcomisd xmm1, xmm0
jnb .L10
vxorpd xmm0, xmm0, xmm0
ret
.L10:
vminsd xmm0, xmm0, xmm1
ret
test2(double, double):
vcmpnltsd xmm1, xmm0, xmm1
vxorpd xmm2, xmm2, xmm2
vblendvpd xmm0, xmm0, xmm2, xmm1
ret
[/asm]
More information about the Gcc-bugs
mailing list