[GHC] #14594: 2 modules / 2500LOC takes nearly 3 minutes to build
GHC
ghc-devs at haskell.org
Fri Jan 5 07:31:47 UTC 2018
#14594: 2 modules / 2500LOC takes nearly 3 minutes to build
-------------------------------------+-------------------------------------
Reporter: schyler | Owner: dfeuer
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 8.0.2
Resolution: | Keywords:
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: |
-------------------------------------+-------------------------------------
Comment (by dfeuer):
I've looked in a little more detail. The thing I've found most surprising
and suspicious is that we end up with absolutely ''enormous'' unfoldings
for some dictionaries. For `Data (Maybe Int)`, we get this mouthful:
{{{#!hs
$s$fDataMaybe_s57H [InlPrag=NOUSERINLINE CONLIKE]
:: Data (Maybe Int)
[LclId,
Unf=DFun: \ ->
Data.Data.C:Data TYPE: Maybe Int
(base-4.11.0.0:Data.Typeable.Internal.mkTrApp
@ * @ * @ Maybe @ Int Data.Data.$fDataMaybe5
Data.Data.$fDataInt4)
`cast` (Sym
(base-4.11.0.0:Data.Typeable.Internal.N:Typeable[0]) <*>_N <Maybe
Int>_N
:: (Type.Reflection.TypeRep (Maybe Int) ::
*)
~R# (Typeable (Maybe Int) ::
Constraint))
\ (@ (c_a5c3 :: * -> *))
(k_a5c4 [Occ=Once!]
:: forall d b. Data d => c_a5c3 (d -> b) -> d
-> c_a5c3 b)
(z_a5c7 [Occ=Once*!] :: forall g. g -> c_a5c3 g)
(ds_a5c9 [Occ=Once!] :: Maybe Int) ->
case ds_a5c9 of {
Nothing -> z_a5c7 @ (Maybe Int)
(GHC.Base.Nothing @ Int);
Just a1_a5ce [Occ=Once] ->
k_a5c4
@ Int
@ (Maybe Int)
Data.Data.$fDataInt
(z_a5c7 @ (Int -> Maybe Int)
(GHC.Base.Just @ Int))
a1_a5ce
}
Data.Data.$fDataMaybe_$cgunfold @ Int
Data.Data.$fDataInt
\ (ds_a51o [Occ=Once!] :: Maybe Int) ->
case ds_a51o of {
Nothing -> Data.Data.$cNothing;
Just _ [Occ=Dead] -> Data.Data.$cJust
}
\ _ [Occ=Dead] -> Data.Data.$tMaybe
...
...
}}}
Why are we inlining method definitions into the dictionary unfolding at
all? I'd expect us to wait for someone to pluck a method from the
dictionary unfolding and then consider whether to inline the method.
Now I don't know if this has anything to do with the problem, but it looks
weird.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/14594#comment:11>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list