#2988: Improve float-in
-------------------------------------------+--------------------------------
  Reporter:  simonpj                       |          Owner:                  
      Type:  compile-time performance bug  |         Status:  new             
  Priority:  normal                        |      Milestone:                  
 Component:  Compiler                      |        Version:  6.10.1          
  Severity:  normal                        |       Keywords:                  
Difficulty:  Unknown                       |       Testcase:                  
        Os:  Unknown/Multiple              |   Architecture:  Unknown/Multiple
-------------------------------------------+--------------------------------
 At the moment we can get a cascade of simplifier iterations like this:
 {{{
 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:
 {{{
    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:
 {{{
                 -- 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://hackage.haskell.org/trac/ghc/ticket/2988>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to