[GHC] #9388: Narrow the scope of the notorious "state hack"
GHC
ghc-devs at haskell.org
Sun Feb 22 13:01:56 UTC 2015
#9388: Narrow the scope of the notorious "state hack"
-------------------------------------+-------------------------------------
Reporter: simonpj | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 7.8.2
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
Type of failure: None/Unknown | Unknown/Multiple
Blocked By: | Test Case:
Related Tickets: | Blocking:
| Differential Revisions:
-------------------------------------+-------------------------------------
Comment (by nomeata):
I gave it a shot. The obvious place to make the demand analyzer believe
that something of type `IO` is going to be called at most once is by
adjusting `body_dmd` in `dmdAnalRhs`, similarly to `[Product demands for
function body]`.
The branch `wip/T9388` contains patches that remove the old state hack and
introduce this one.
On first glance, it seems to work. At least the bug in #10102 does not
occur any more.
Overall, it has a negative effect on performance (at least on bytes
allocated): nofib’s `fibheaps` regresses by `16.7%`, `banner` by `12.4%`
and `hpg` by `7.1%`, rewrite by `5.8%`. Others improve: `k-nucleotide` by
`5%`. Geometric mean is a regression by `0.4%`. A quick diff of fibheap’s
core shows large changes, which I did not investigate further.
The branch validates, with the exception of a number of compiler
performance benchmarks (T9203 haddock.Cabal haddock.base T5030 T5631
T9872c T9872a T5642 T9020 T3064 T9872d T9872b T1969), where allocation
increases by up to 30%. So real world programs run better with the old
state hack.
In a way that is expected: Eta expansion is usually a good thing, even if
cannot see that a the lambda is indeed one-shot. And even if it is not
really one-shot, the benefits of eta-expansion might, in some cases,
outweigh the cost of lost sharing. Only in a few (uncommon?) cases, e.g.
replicate with a large number, it really hurts.
I’m surprised that no test case starts to fail, and no known-to-fail test
case suddenly passes; it seems that we have little coverage on the desired
and/or unwanted effects of the state hack.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9388#comment:6>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list