
#8647: Reduce allocations in `integer-gmp` --------------------------------------------+------------------------------ Reporter: hvr | Owner: Type: task | Status: patch Priority: normal | Milestone: 7.8.1 Component: libraries (other) | Version: 7.6.3 Resolution: | Keywords: integer- Operating System: Unknown/Multiple | gmp Type of failure: Runtime performance bug | Architecture: x86_64 Test Case: | (amd64) Blocking: | Difficulty: Unknown | Blocked By: | Related Tickets: #8638 --------------------------------------------+------------------------------ Changes (by hvr): * status: new => patch Comment: I attached the patch instead of pushing to Git, as I'm not satisfied yet with it. It's works stable here (passes `validate` & `nofib`), but I'm not sure about the `unsafeCoerce#`. In my first version of this patch, I used a 3-tuple `(# Int#, ByteArray#, Word# #)` as return value, but that wasted 1 return register per `Integer` result, and still had to return a NULL pointer for `ByteArray#` for the case it wasn't used. I'm wondering if it would be feasible and sensible to return a properly constructed `Integer` value from the Cmm wrappers (i.e. to fold `tupToInteger` into gmp-`wrappers.cmm`), but I haven't figured out yet how to implement that in Cmm. Moreover, I'm also still wondering how to properly allocate stack-space in "high-level" Cmm procedures (see [http://www.haskell.org/pipermail/ghc- devs/2014-January/003616.html posting on ghc-devs@]), as the current code seems to work properly only as long the Cmm procedures don't force the code generator to save registers to the stack. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/8647#comment:6 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler