Opportunity to improve CSE
In nofib/spectral/mandel2
, the function check_perim
calls point_colour
on various arguments. After inlining point_colour
there is the opportunity to CSE among the sub-expressions the inlinings create.
In GHC 7.6, the join point didn't have a "one-shot" flag, so the full laziness pass floated these sub-expressions out, and they got CSEd.
As part of Ilya's new demand analyser changes, we get the "one-shot" flag right, so don't MFE those sub-expressions, so they aren't CSEd. As a result, allocation on mandel2
increases slightly (4.2%).
The solution is, I think, to do something a bit like like CorePrep
before CSE. At the moment if we have
case f (I# y) of { (a,b) ->
case g (I# y) of { (p,q) -> ... }}
we stuipdly don't CSE that (I# y)
even though it is manifestly sharable. Somehow we should.
Trac metadata
Trac field | Value |
---|---|
Version | 7.6.1 |
Type | Bug |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Compiler |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | |
Operating system | |
Architecture |