[GHC] #15754: Move free variable computation to after STG passes

GHC ghc-devs at haskell.org
Mon Oct 22 06:38:31 UTC 2018


#15754: Move free variable computation to after STG passes
-------------------------------------+-------------------------------------
        Reporter:  bgamari           |                Owner:  (none)
            Type:  bug               |               Status:  new
        Priority:  normal            |            Milestone:  8.8.1
       Component:  Compiler          |              Version:  8.6.1
      Resolution:                    |             Keywords:
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  None/Unknown      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:  #9718             |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------
Changes (by osa1):

 * related:   => #9718


Comment:

 So, for #9718 I'm working on a large Stg refactoring that fixes this
 ticket
 too. I'll add the detailed refactoring plan in #9718. Basically the
 proposal is
 we do analyses as late as possible, and for free variables we do the
 analysis
 right before code generation. But if late lambda lifting uses this
 information
 then that's not going to work, we need to do it earlier, and then make
 sure
 (perhaps only in debug builds or with a flag) that late lambda lift
 correctly
 updates free variables of closures.

 Because lll (late lambda lift) will be the first pass that'll need the
 free
 variables I think we should compute it right before the pass. That means
 (depending on when we're running lll) some passes may not have the
 information.
 In that case perhaps it's better to remove the fvs list from the syntax,
 and
 pass it around in an environment.

 Alternatively we could keep it in the syntax, do the computation in
 CoreToStg,
 and run a sanity check after each pass to make sure the information
 remains
 correct. However this means that a pass that doesn't need the information,
 but
 incidentally updates it (we currently don't have such a pass) will have to
 deal
 with the fvs field. Not sure if this is a huge concern right now..

 Any thoughts?

-- 
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15754#comment:5>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list