[llvm-bugs] [Bug 43239] New: Missed optimization: extra XOR and FMA
via llvm-bugs
llvm-bugs at lists.llvm.org
Fri Sep 6 06:17:02 PDT 2019
https://bugs.llvm.org/show_bug.cgi?id=43239
Bug ID: 43239
Summary: Missed optimization: extra XOR and FMA
Product: clang
Version: trunk
Hardware: PC
OS: Linux
Status: NEW
Severity: enhancement
Priority: P
Component: C++
Assignee: unassignedclangbugs at nondot.org
Reporter: zamazan4ik at tut.by
CC: blitzrakete at gmail.com, dgregor at apple.com,
erik.pilkington at gmail.com, llvm-bugs at lists.llvm.org,
richard-llvm at metafoo.co.uk
For the code below:
#include <cmath>
double t1(double x, double y)
{
return std::sqrt(x*x + y*y);
}
clang(trunk) with '-O3 -ffast-math' generates:
t1(double, double): # @t1(double, double)
mulsd xmm0, xmm0
mulsd xmm1, xmm1
addsd xmm1, xmm0
xorps xmm0, xmm0
sqrtsd xmm0, xmm1
ret
gcc(trunk) with '-O3 -ffast-math' is better here (doesn't add extra xorps
instr) and generates:
t1(double, double):
mulsd xmm1, xmm1
mulsd xmm0, xmm0
addsd xmm0, xmm1
sqrtsd xmm0, xmm0
ret
Godbolt playground: https://godbolt.org/z/Cx9EDI
Also note that with '-O3 -march=native -ffast-math' both compilers (gcc(trunk)
and clang(trunk)) generate equal code:
t1(double, double):
vmulsd xmm1, xmm1, xmm1
vfmadd132sd xmm0, xmm1, xmm0
vsqrtsd xmm0, xmm0, xmm0
ret
Godbolt playground: https://godbolt.org/z/fHgGxw
But without '-ffast-math' outputs are different: clang doesn't use FMA instr.
Godbolt playground: https://godbolt.org/z/X46_hD
--
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20190906/58406338/attachment-0001.html>
More information about the llvm-bugs
mailing list