What is the state of sqrt in LLVM? It was an intrinsic but there are no OCaml bindings for it and, last I looked, it generated inefficient code on Linux due to this bug: http://www.llvm.org/PR3219 Is the intrinsic deprecated? Am I losing a lot of performance by calling sqrt from libm instead of using the intrinsic? -- Dr Jon Harrop, Flying Frog Consultancy Ltd. http://www.ffconsultancy.com/?e
On Jan 7, 2010, at 7:06 AM, Jon Harrop wrote:> > What is the state of sqrt in LLVM? > > It was an intrinsic but there are no OCaml bindings for it and, last > I looked, > it generated inefficient code on Linux due to this bug: > > http://www.llvm.org/PR3219 > > Is the intrinsic deprecated? Am I losing a lot of performance by > calling sqrt > from libm instead of using the intrinsic?There is a fundamental difference between sqrt() and llvm.sqrt: the former is defined on negative values and sets errno (on linux). The later is undefined. Both work well for their stated purpose, llvm.sqrt should not be slower than sqrt even on linux. Both llvm.sqrt and sqrt could be much better on linux, but noone seems compelled to do the work. -Chris
On Thu, Jan 7, 2010 at 5:48 PM, Chris Lattner <clattner at apple.com> wrote:> > On Jan 7, 2010, at 7:06 AM, Jon Harrop wrote: > >> >> What is the state of sqrt in LLVM? >> >> It was an intrinsic but there are no OCaml bindings for it and, last >> I looked, >> it generated inefficient code on Linux due to this bug: >> >> http://www.llvm.org/PR3219 >> >> Is the intrinsic deprecated? Am I losing a lot of performance by >> calling sqrt >> from libm instead of using the intrinsic? > > There is a fundamental difference between sqrt() and llvm.sqrt: the > former is defined on negative values and sets errno (on linux). The > later is undefined. Both work well for their stated purpose, > llvm.sqrt should not be slower than sqrt even on linux. Both > llvm.sqrt and sqrt could be much better on linux, but noone seems > compelled to do the work.Many platforms could also benefit from recognizing 1.0/sqrt() as rsqrt(). deep
On Jan 7, 2010, at 11:48 AM, Chris Lattner <clattner at apple.com> wrote:> There is a fundamental difference between sqrt() and llvm.sqrt: the > former is defined on negative values and sets errno (on linux). The > later is undefined. Both work well for their stated purpose, > llvm.sqrt should not be slower than sqrt even on linux. Both > llvm.sqrt and sqrt could be much better on linux, but noone seems > compelled to do the work. > > -ChrisWhat exactly is the work for llvm.sqrt on Linux?