[LLVMdev] Inlining sqrt library function in X86

Gurd, Preston preston.gurd at intel.com
Fri May 17 15:33:14 PDT 2013


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.

Thanks!

Preston

--
Preston Gurd <preston.gurd at intel.com>
  Intel Waterloo

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130517/051b48de/attachment.html>


More information about the llvm-dev mailing list