
#2269: Word type to Double or Float conversions are slower than Int conversions -------------------------------------+------------------------------------- Reporter: dons | Owner: dons@… Type: feature request | Status: new Priority: lowest | Milestone: Component: Compiler | Version: 6.8.2 Resolution: | Keywords: rules, | performance, double Operating System: Unknown/Multiple | Architecture: Type of failure: Runtime | Unknown/Multiple performance bug | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by rwbarton): Replying to [comment:16 thomie]:
But `testWord` is still 3 times slower than `testInt`. {{{ $ time ./testWord 5.00000005e15
real 0m0.579s user 0m0.575s sys 0m0.003s
$ time ./testInt 5.00000005e15
real 0m0.196s user 0m0.191s sys 0m0.004s }}}
As I can not easily explain this difference, I'll leave this ticket open for now.
It's because the x86 NCG implements the new `MO_UF_Conv` as a call to a C function, rather than generating code inline like `MO_SF_Conv` (`cvtsi2sdq`). Unfortunately there's no corresponding instruction for converting an unsigned 64-bit integer to float or double, but for converting to double the code generated by `clang -O` is pretty small and simple and probably worth inlining. It will still be somewhat slower than `Int` though. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/2269#comment:21 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler