[GHC] #10010: LLVM/optimized code for sqrt incorrect for negative values

GHC ghc-devs at haskell.org
Tue Jan 20 19:43:56 UTC 2015


#10010: LLVM/optimized code for sqrt incorrect for negative values
-------------------------------------+-------------------------------------
              Reporter:  glguy       |             Owner:
                  Type:  bug         |            Status:  new
              Priority:  normal      |         Milestone:
             Component:  Compiler    |           Version:  7.8.4
  (LLVM)                             |  Operating System:  Unknown/Multiple
              Keywords:              |   Type of failure:  Incorrect result
          Architecture:              |  at runtime
  Unknown/Multiple                   |        Blocked By:
             Test Case:              |   Related Tickets:
              Blocking:              |
Differential Revisions:              |
-------------------------------------+-------------------------------------
 The LLVM sqrt intrinsic is undefined below values of -0.0

 See http://llvm.org/docs/LangRef.html#llvm-sqrt-intrinsic

 In some versions of LLVM it returns 0.0 in this case, but in newer
 versions the return value is undefined.

 This causes the result of Haskell's sqrt to vary at negative values based
 on the codegen and optimization flags chosen.

 {{{
 main = print (sqrt (-7 :: Double))
 }}}

 {{{
 $ ghc -O -fllvm Sqrt.hs
 [1 of 1] Compiling Main             ( Sqrt.hs, Sqrt.o )
 Linking Sqrt ...
 $ ./Sqrt
 0.0
 $ ghc -O  Sqrt.hs
 [1 of 1] Compiling Main             ( Sqrt.hs, Sqrt.o )
 Linking Sqrt ...
 $ ./Sqrt
 NaN
 }}}

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/10010>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list