[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.


-------------- 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