[LLVMdev] Inlining sqrt library function in X86
Chris Lattner
clattner at apple.com
Fri May 17 15:36:51 PDT 2013
On May 17, 2013, at 3:33 PM, "Gurd, Preston" <preston.gurd at intel.com> wrote:
> Using the following example program
>
> #include <math.h>
>
> double f(double d){
> return sqrt(d);
> }
>
> and compiling it with “clang –O3 …”, I was trying to determine what it would take to get the X86 code generator to replace the call to sqrt with a sqrtsd instruction inline.
>
> It turns out that it could do exactly that, were it not for the fact that in the function visitUnaryFloatCall() at line 5514 in SelectionDAGBuilder.cpp, the result of
>
> !I.onlyReadsMemory()
>
> Is true, so the code is unable to replace the function call with an ISD::FSQRT SDNode. If I remove the above test, then the compiler will emit a sqrtsd instruction.
>
> I am hoping that someone might be able to comment on what onlyReadsMemory is supposed to do be doing in general and why it is returning false in this case.
>
The compiler is being conservative about errno (which sqrt in libm can set, but "sqrtss" doesn't). Try building with -fno-math-errno.
-Chris
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130517/2074c7c2/attachment.html>
More information about the llvm-dev
mailing list