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

Amos Robinson amos.robinson at gmail.com
Wed May 15 14:46:50 CEST 2013


Repository : http://darcs.haskell.org/ghc.git/

On branch  : master

https://github.com/ghc/ghc/commit/8a58851150af11020140256bbd7c6d5359e020ee

>---------------------------------------------------------------

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



More information about the ghc-commits mailing list