CorePrep: Refactor FloatingBind (#23442)
A drastically improved architecture for local floating in CorePrep that decouples the decision of whether a float is going to be let- or case-bound from how far it can float (out of strict contexts, out of lazy contexts, to top-level).
There are a couple of new Notes describing the effort:
-
Note [Floating in CorePrep]
for the overview -
Note [BindInfo and FloatInfo]
for the new classification of floats -
Note [Floats and FloatDecision]
for how FloatInfo is used to inform floating decisions
This is necessary ground work for proper treatment of Strict fields and unlifted values at top-level.
Fixes #23442 (closed).