#2289: Needless reboxing of values when returning from a tight loop
-------------------------------------------+--------------------------------
Reporter: dons | Owner:
Type: run-time performance bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 6.8.2
Severity: normal | Resolution:
Keywords: boxing, loops, performance | Testcase:
Architecture: Unknown | Os: Unknown
-------------------------------------------+--------------------------------
Comment (by dons):
Note that if we specialise the constructor manually, we can get the
correct unboxing:
That is, just using strict pairs isn't enough:
{{{
data P a b = P {-# UNPACK #-} !a {-# UNPACK #-} !b
}}}
won't work.
where we use P only for P Double Int, I'm unable to get the return value
unboxed.
If we specialise P, data P = P !Double !Int, then we do get the unpacking,
as expected.
This makes strict pairs a little less useful for accumulating state -- we
have to specialise them
directly ourselves to avoid the reboxing penalty.
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/2289#comment:2>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs