[GHC] #10844: CallStack should not be inlined
GHC
ghc-devs at haskell.org
Sun Sep 6 05:04:01 UTC 2015
#10844: CallStack should not be inlined
-------------------------------------+-------------------------------------
Reporter: nomeata | Owner: gridaphobe
Type: task | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 7.10.2
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
| Unknown/Multiple
Type of failure: None/Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Revisions:
-------------------------------------+-------------------------------------
Comment (by gridaphobe):
Just copying some notes from our discussion on phabricator for easy
reference:
gridaphobe:
> - The increase in binary sizes (at least for the atom benchmark) is
coming from a handful of modules in ghc-prim and base
> - GHC/Types.o has increased by about 5K. It's now the home of the SrcLoc
and CallStack types, which together define 7-8 record selectors, so I
think this may not be too surprising.
> - Control/Applicative.o, Data/Either.o, Data/Foldable.o, and a few
others in base have increased in by 2-5K each. Every one of these modules
contains at least one CallStack in the Core.
> - The other modules I've looked at that have not increased in size do
not have a CallStack, so it seems pretty clear that the increase *is* due
to the CallStack.
> - Finally, I think you're correct that the CallStacks are being inlined
sometimes, because I found a CallStack referencing GHC.Base in
Data.Foldable.
nomeata:
> I’m not quite sure what the best way is to prevent the sharing. Maybe
the type checker, which produces the CallStack values, can be told to add
the (core equivalent) of a NOINLINE pragma to them?
---
I agree that CallStacks should not be inlined. Is there a core equivalent
of a NOINLINE pragma? If so, it ought the be straightforward to have the
desugarer attach it.
Also, is there any extra cost to lifting all of the int and string
components of a `SrcLoc` to top-level binders (which seems similarly
pointless)? Or does it just clutter the Core output?
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/10844#comment:2>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list