Improve SetLevels for join points
authorSimon Peyton Jones <simonpj@microsoft.com>
Wed, 1 Mar 2017 01:23:15 +0000 (20:23 -0500)
committerDavid Feuer <David.Feuer@gmail.com>
Wed, 1 Mar 2017 01:23:16 +0000 (20:23 -0500)
commit6eb52cfc2e31df2561860f43d41766464ccfe8af
tree978d0f282f790b5011cbb82a4fc13ddd3cc1c160
parent871b63e4ea95d4c516d31378d0475167e75caa01
Improve SetLevels for join points

C.f. Trac #13286, #13236

* Never destroy a join point unless it goes to top level
  See Note [Floating join point bindings]

* Never float a MFE if it has a free join variable
  Note [Free join points]

* Stop treating nullary join points specially

* Enforce the invariant that le_join_ceil >= le_ctxt_lvl
  (Needs more thought...)

Reviewers: austin, bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3199
compiler/simplCore/SetLevels.hs