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: unassignedclangb...@nondot.org
Reporter: zamazan...@tut.by
CC: blitzrak...@gmail.com, dgre...@apple.com,
erik.pilking...@gmail.com, llvm-bugs@lists.llvm.org,
richard-l...@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.
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs