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?
On Jan 7, 2010, at 3:53 PM, Robert A. Zeh wrote:> > 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. >> >> -Chris > > What exactly is the work for llvm.sqrt on Linux?Ah sorry, llvm.sqrt works fine on linux. The issue is that a raw call to sqrt() in a C program doesn't typically compile to llvm.sqrt on linux, because it sets errno. This can be controlled with -fmath-errno. -Chris
On Jan 7, 2010, at 4:04 PMPST, Chris Lattner wrote:> On Jan 7, 2010, at 3:53 PM, Robert A. Zeh wrote: > 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. >>> >>> -Chris >> >> What exactly is the work for llvm.sqrt on Linux? > > Ah sorry, llvm.sqrt works fine on linux. The issue is that a raw > call to sqrt() in a C program doesn't typically compile to llvm.sqrt > on linux, because it sets errno. This can be controlled with -fmath- > errno.It is more than errno. sqrt() should't compile to llvm.sqrt on any platform that uses IEEE754 math, because IEEE sqrt() is well defined on negative arguments and llvm.sqrt isn't. There are currently no command line arguments to override this.