[GHC] #8326: Place heap checks common in case alternatives before the case
GHC
ghc-devs at haskell.org
Fri Oct 17 10:37:45 UTC 2014
#8326: Place heap checks common in case alternatives before the case
-------------------------------------+-------------------------------------
Reporter: jstolarek | Owner: jstolarek
Type: task | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 7.7
Resolution: | Keywords:
Operating System: | Architecture: Unknown/Multiple
Unknown/Multiple | Difficulty: Unknown
Type of failure: | Blocked By:
None/Unknown | Related Tickets: #1498
Test Case: |
Blocking: 8317 |
Differential Revisions: Phab:D343 |
-------------------------------------+-------------------------------------
Comment (by jstolarek):
Thanks for detailed explanation. I was a bit concerned about all that
extra stuff like saving cost centres in the general case. Don't we need to
worry that any of these will impact performance of the compiled code?
> The difficulty here is that it's hard to find out whether the branches
allocate without running the code generator on them
Yes, I believe this was our conclusion when we discussed that during my
internship. I don't see how to use `StgCmmMonad.getHeapUsage` to implement
the solution. We compile all the alternatives in one go by calling `cgAlts
(gc_plan,ret_kind) (NonVoid bndr) alt_type alts`, whereas to apply any of
the criteria that you proposed we would need to compile the alternatives
one by one and analyse their heap usage. My understanding is that if we
simply call `cgAlts` in a lambda passed to `getHeapUsage` we will only
know how much heap total is used by the compiled alternatives but we won't
have any detailed knowledge about each of the alternatives. Is that
correct?
> But before doing that, the first thing is to decide what the criteria
should be.
It's a bit hard to tell without doing the actual implementation and
measuring the results. I guess there will be some programs that work
better with the first criterion and some that work better with the second
criterion. That being said, I'd go with the first one. Slightly larger
binaries are a small price to pay for possibility of having better
performance.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8326#comment:14>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list