[commit: ghc] wip/T14152: Implement a dedicated exitfication pass #14152 (0e953da)

git at git.haskell.org git at git.haskell.org
Sun Oct 29 04:08:24 UTC 2017


Repository : ssh://git@git.haskell.org/ghc

On branch  : wip/T14152
Link       : http://ghc.haskell.org/trac/ghc/changeset/0e953da147c405648356f75ee67eda044fffad49/ghc

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

commit 0e953da147c405648356f75ee67eda044fffad49
Author: Joachim Breitner <mail at joachim-breitner.de>
Date:   Sat Aug 26 14:35:50 2017 +0200

    Implement a dedicated exitfication pass #14152
    
    The idea is described in #14152, and can be summarized: Float the exit
    path out of a joinrec, so that the simplifier can do more with it.
    See the test case for a nice example.
    
    The floating goes against what the simplifier usually does, hence we
    need to be careful not inline them back.
    
    The position of exitification in the pipeline was chosen after a small
    amount of experimentation, but may need to be improved. For example,
    exitification can allow rewrite rules to fire, but for that it would
    have to happen before the `simpl_phases`.
    
    Perf.haskell.org reports these nice performance wins:
    
        Nofib allocations
        fannkuch-redux    78446640  - 99.92%      64560
        k-nucleotide     109466384  - 91.32%    9502040
        simple            72424696  -  5.96%   68109560
    
        Nofib instruction counts
        fannkuch-redux  1744331636  -  3.86% 1676999519
        k-nucleotide    2318221965  -  6.30% 2172067260
        scs             1978470869  -  3.35% 1912263779
        simple           669858104  -  3.38%  647206739
        spectral-norm    186423292  -  5.37%  176411536
    
    Differential Revision: https://phabricator.haskell.org/D3903


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

0e953da147c405648356f75ee67eda044fffad49
 compiler/basicTypes/Id.hs                          |   6 +-
 compiler/basicTypes/Unique.hs                      |   4 +
 compiler/coreSyn/CoreLint.hs                       |   1 +
 compiler/coreSyn/CoreSyn.hs                        |  10 +-
 compiler/ghc.cabal.in                              |   1 +
 compiler/main/DynFlags.hs                          |   6 +
 compiler/simplCore/CoreMonad.hs                    |   2 +
 compiler/simplCore/Exitify.hs                      | 442 +++++++++++++++++++++
 compiler/simplCore/SimplCore.hs                    |   8 +
 compiler/simplCore/SimplUtils.hs                   |   1 +
 compiler/simplCore/Simplify.hs                     |   3 +
 docs/users_guide/using-optimisation.rst            |  10 +
 testsuite/tests/simplCore/should_compile/T14152.hs |  23 ++
 .../tests/simplCore/should_compile/T14152.stderr   | 129 ++++++
 .../tests/simplCore/should_compile/T14152a.hs      |   1 +
 .../tests/simplCore/should_compile/T14152a.stderr  | 222 +++++++++++
 testsuite/tests/simplCore/should_compile/all.T     |   2 +
 17 files changed, 865 insertions(+), 6 deletions(-)

Diff suppressed because of size. To see it, use:

    git diff-tree --root --patch-with-stat --no-color --find-copies-harder --ignore-space-at-eol --cc 0e953da147c405648356f75ee67eda044fffad49


More information about the ghc-commits mailing list