[LLVMdev] Inlining sqrt library function in X86

Nadav Rotem nrotem at apple.com
Sat May 18 10:18:14 PDT 2013

Does fast-math imply no-math-errno ?


On May 17, 2013, at 15:36, Chris Lattner <clattner at apple.com> wrote:

> 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
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130518/698f2d67/attachment.html>

More information about the llvm-dev mailing list