[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 ?
Thanks,
Nadav
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