[commit: ghc] master: SpecConstr: seed specialisation of top-level bindings, as with letrecs. (8a58851)

Simon Peyton-Jones simonpj at microsoft.com
Wed May 15 15:03:16 CEST 2013


Cool!  Did you comment the change with a Note [Seed specialisation of top-level bindings] inside SpecContr itself?  (You could use more or less the text below.)

Simon

| -----Original Message-----
| From: ghc-commits-bounces at haskell.org [mailto:ghc-commits-
| bounces at haskell.org] On Behalf Of Amos Robinson
| Sent: 15 May 2013 13:47
| To: ghc-commits at haskell.org
| Subject: [commit: ghc] master: SpecConstr: seed specialisation of top-
| level bindings, as with letrecs. (8a58851)
| 
| Repository : http://darcs.haskell.org/ghc.git/
| 
| On branch  : master
| 
| https://github.com/ghc/ghc/commit/8a58851150af11020140256bbd7c6d5359e020
| ee
| 
| >---------------------------------------------------------------
| 
| commit 8a58851150af11020140256bbd7c6d5359e020ee
| Author: Amos Robinson <amos.robinson at gmail.com>
| Date:   Wed May 15 22:15:56 2013 +1000
| 
|     SpecConstr: seed specialisation of top-level bindings, as with
| letrecs.
| 
|     When specialising a top-level recursive group, if none of the
| binders
|     are exported then we can start specialising based on the later calls
| to
|     the functions.
|     This is instead of creating specialisations based on the RHS of the
|     bindings.
|     The main benefit of this is that only specialisations that will
| actually
|     be used are created. This saves quite a bit of memory when compiling
|     stream-fusion and ForceSpecConstr sort of code.
| 
|     Nofib has an average allocation and runtime of -0.7%, maximum 2%.
|     There are a few with significant decreases in allocation (10 - 20%)
|     but, interestingly, those ones seem to have similar runtimes.
|     One of these does have a significantly reduced total elapsed time
|     though: -38%.
| 
|     On average the nofib compilation times are the same, but they do
| vary
|     with s.d. of -4 to 4%.
|     I think this is acceptable because of the fairly major code blowup
| fixes
|     this has for fusion-style code.
|     (In one example, a SpecConstr was previously producing 122,000 term
| size,
|     now only produces 28,000 with the same object code)
| 
|  compiler/specialise/SpecConstr.lhs | 142 +++++++++++++++++++++++++++++-
| -------
|  1 file changed, 113 insertions(+), 29 deletions(-)
| 
| 
| Diff suppressed because of size. To see it, use:
| 
|     git show 8a58851150af11020140256bbd7c6d5359e020ee
| 
| _______________________________________________
| ghc-commits mailing list
| ghc-commits at haskell.org
| http://www.haskell.org/mailman/listinfo/ghc-commits



More information about the ghc-devs mailing list