[GHC] #2988: Improve float-in
GHC
ghc-devs at haskell.org
Thu Jun 29 22:40:49 UTC 2017
#2988: Improve float-in
-------------------------------------+-------------------------------------
Reporter: simonpj | Owner: (none)
Type: task | Status: new
Priority: lowest | Milestone: 8.4.1
Component: Compiler | Version: 6.10.1
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
Type of failure: Compile-time | Unknown/Multiple
performance bug | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Changes (by bgamari):
* milestone: 8.2.1 => 8.4.1
@@ -2,1 +2,1 @@
- {{{
+ {{{#!hs
@@ -18,1 +18,1 @@
- {{{
+ {{{#!hs
@@ -26,1 +26,1 @@
- {{{
+ {{{#!hs
New description:
At the moment we can get a cascade of simplifier iterations like this:
{{{#!hs
let x1 = blah
x2 = x1 : []
x3 = 1 : x2
x4 = 2 : x3
in case blah of
True -> f x4
False -> g x4
}}}
Then `x4` satisfies the conditions for `postInlineUnconditionally` (not
top-level, used once in each case branch, not inside lambda). So it's
inlined. In the next iteration of the simplifier, `x3` satisfies the
conditions, and so on.
It might be better for `postUnconditionally` to require an interesting
context. But then this case doesn't work so well:
{{{#!hs
let x = blah in case foo of { A -> ..x..; B -> ..x..; C -> ..no x.. }
}}}
If C is the hot branch, it's a good idea to push `x` into the A,B
branches.
But perhaps this question is one that `FloatIn` should deal with, not
`postInlineUnconditionally`. Indeed `FloatIn` has the following comment:
{{{#!hs
-- For case expressions we duplicate the binding if it is
-- reasonably small, and if it is not used in all the RHSs
-- This is good for situations like
-- let x = I# y in
-- case e of
-- C -> error x
-- D -> error x
-- E -> ...not mentioning x...
}}}
So this ticket is just to record the idea:
* Make `postInlineUnconditionally` check for interesting context
...and check on performance changes, and whether `FloatIn` is doing the
Right Thing.
Simon
--
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/2988#comment:16>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list