GHC | 1 May 09:43 2008

[GHC] #2255: Improve SpecConstr for free variables

#2255: Improve SpecConstr for free variables
-----------------------------------------+----------------------------------
    Reporter:  simonpj                   |       Owner:         
        Type:  run-time performance bug  |      Status:  new    
    Priority:  normal                    |   Milestone:  _|_    
   Component:  Compiler                  |     Version:  6.8.2  
    Severity:  normal                    |    Keywords:         
  Difficulty:  Unknown                   |    Testcase:         
Architecture:  Unknown                   |          Os:  Unknown
-----------------------------------------+----------------------------------
 This ticket records a suggestion for improving `SpecConstr`, so we don't
 lose it. The original `SpecConstr` transformation is described in
 "[http://research.microsoft.com/%7Esimonpj/papers/spec-constr Call pattern
 specialisation for Haskell]".  Consider this program
 {{{
    f x = let g y = ...case x of { z:zs -> e1; [] -> e2 } ...
           in
           ...case x of
                 z:zs -> if ... then g 3 else g 4
                 []   -> ...
 }}}
 Here 'x' is free in 'g', but x's value is known at g's call sites.  It's
 not enough just to know "x is a cons" inside g; we must also have access
 to z,zs.  So perhaps the thing to do is to imagine lambda-lifting 'g' to
 become 'gl' thus:
 {{{
   gl x y = ...case x of { z:zs -> e1; [] -> e2 } ...

   f x = ...case x of
                 z:zs -> if ... then gl x 3 else gl x 4
                 []   -> ...
 }}}
 Now the `SpecConstr` transformation will apply nicely.  And it's arguably
 a bad shortcoming that currently the mere act of lambda lifting can affect
 how effective `SpecConstr` is.

 Of course, we only want to lambda-lift wrt the parameters that'll be
 specialised, so this transformation probably wants to be done at the same
 time as the rest of `SpecConstr`. I don't have much idea of how hard
 that'd be, but it's a nice idea.

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/2255>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
_______________________________________________
Glasgow-haskell-bugs mailing list
Glasgow-haskell-bugs <at> haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Gmane