[GHC] #7258: Compiling DynFlags is jolly slow
GHC
ghc-devs at haskell.org
Thu Oct 26 13:31:08 UTC 2017
#7258: Compiling DynFlags is jolly slow
-------------------------------------+-------------------------------------
Reporter: simonpj | Owner: simonpj
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 7.6.1
Resolution: | Keywords: deriving-perf
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 alexbiehl):
Replying to [comment:66 simonpj]:
> > What about using a different kind of data structure like a map or
similar
>
> Of course that the first thing we should do, once we are convinced
that's where the time is going! (We only ave suggestive evidence so far.)
Small maps should be cheap; that's the business of the containers library.
`LocalReg` is `Uniquable` so something like this should work:
{{{
type LocalRegSet = UniqSet LocalReg
emptyLocalRegSet :: LocalRegSet
emptyLocalRegSet = emptyUniqSet
nullLocalRegSet :: LocalRegSet -> Bool
nullLocalRegSet = isEmptyUniqSet
elemLocalRegSet :: LocalReg -> LocalRegSet -> Bool
elemLocalRegSet = elementOfUniqSet
insertLocalRegSet :: LocalRegSet -> LocalReg -> LocalRegSet
insertLocalRegSet = addOneToUniqSet
cannot_inline = skipped `regsUsedIn` rhs -- Note [dependent assignments]
|| l `elemLocalRegSet` skipped
|| not (okToInline dflags rhs node)
regsUsedIn :: LocalRegSet -> CmmExpr -> Bool
regsUsedIn ls _ | nullLocalRegSet ls = False
regsUsedIn ls e = wrapRecExpf f e False
where f (CmmReg (CmmLocal l)) _ | l `elemLocalRegSet` ls = True
f (CmmRegOff (CmmLocal l) _) _ | l `elemLocalRegSet` ls = True
f _ z = z
}}}
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/7258#comment:67>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list