[GHC] #14259: Worker/Wrapper for sum return
GHC
ghc-devs at haskell.org
Mon Jan 21 20:50:59 UTC 2019
#14259: Worker/Wrapper for sum return
-------------------------------------+-------------------------------------
Reporter: jheek | Owner: (none)
Type: feature request | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 8.2.1
Resolution: | Keywords: UnboxedSums
Operating System: Unknown/Multiple | Architecture:
| Unknown/Multiple
Type of failure: None/Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: #12364 | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by andrewthad):
Even only having CPR analysis (and not demand analysis) working with
`UnboxedSums` is rather useful to me. I have some libraries where several
functions look like this:
{{{
data MyExceptionType = ... -- many constructors
foo :: Int -> Int -> IO (Either MyExceptionType Int)
}}}
Crucially, `foo` is to large to inline, and I expect that the user is
going to case on the result immediately (directly or by using something
than inlines like `either`). If Phab:D2436 is correct, I'd be happy to
rebase it and stick it behind a flag (maybe `-fcpr-small-sums`) that would
cause this to happen for types with three or fewer data constructors (so
`MyExceptionType` above doesn't get worker-wrappered). Hopefully, I could
get this core:
{{{
foo :: Int -> Int -> IO (Either MyExceptionType Int)
fooInner :: Int# -> Int# -> State# RealWorld -> (# State# RealWorld, (#
MyExceptionType | Int# #) #)
}}}
Since this does not reduce allocations in general, it has to be behind a
flag. I don't know what a good name would be.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/14259#comment:5>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list