Late CC profiling

Simon Peyton Jones simon.peytonjones at gmail.com
Fri Apr 4 21:43:52 UTC 2025


Hi Matthew, Andreas, Ben

In GHC today there is a strange inconsistency:

   - Bindings for data constructor wrappers and class method selectors are
   added at the end of CoreTidy.
   - Bindings for data constructor workers are added at the start of
   CorePrep

This is deeply strange.  In !10479 (unary class patch)
<https://gitlab.haskell.org/ghc/ghc/-/merge_requests/10479> I had to make
some changes in this area and after being baffled I moved all these
implicit bindings to one place at the start of CorePrep.  That is simpler
and neater.  There is no reason for them to be separate.

BUT I find that one thing happens between Tidy and Prep, namely
late-cost-centre injection.  That means we will no longer get
late-cost-centres for data constructor wrappers and class method
selectors.  I think that this is what is causing diffs in the output for
callstack001 and friends in !10479.

I think that this is perfectly fine, and I propose to accept the changes.

Another alternative would be to inject all of these bindings at the end of
Tidy (instead of the start of Prep),  But it's much nicer at the start of
Prep -- we don't want any of these bindings to appear  in interface files.

Can you confirm that the change is ok?  Thanks

Simon
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-devs/attachments/20250404/54575125/attachment.html>


More information about the ghc-devs mailing list