[GHC] #12367: Commit adding instances to GHC.Generics regression compiler performance
GHC
ghc-devs at haskell.org
Mon Jul 18 23:35:27 UTC 2016
#12367: Commit adding instances to GHC.Generics regression compiler performance
-------------------------------------+-------------------------------------
Reporter: bgamari | Owner: bgamari
Type: bug | Status: new
Priority: normal | Milestone: 8.0.2
Component: Compiler | Version: 8.0.1
Resolution: | Keywords: Generics
Operating System: Unknown/Multiple | Architecture:
Type of failure: Compile-time | Unknown/Multiple
performance bug | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Changes (by simonpj):
* cc: ezyang (added)
Comment:
Great catch! This is all Edward's fault :-).
{{{
commit 4c834fdddf4d44d12039da4d6a2c63a660975b95
Author: Edward Z. Yang <ezyang at cs.stanford.edu>
Date: Mon Nov 17 21:23:52 2014 -0800
}}}
The `is_dfun` field of a `ClsInst` should be lazy, only pulled on if the
instance is actually needed. See the `forkM` in `TcIface.tcIfaceInst`.
But this `instIsVisible` stuff is pulling on the `is_dfun` which forces
lots of stuff to get loaded that is entirely unnecessary.
Solution: add an `is_mod :: Module` field to `ClsInst`, which gives the
`Module` for the `ClsInst`. Invariant: it's the same Module as that for
the `is_dfun`. And use that `is_mod` field in `instIsVisible`.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/12367#comment:15>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list