Skip to content
  • Sebastian Graf's avatar
    fea9ecdb
    CorePrep: Refactor FloatingBind (#23442) · fea9ecdb
    Sebastian Graf authored and Marge Bot's avatar Marge Bot committed
    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.
    
    NoFib results (omitted = 0.0%):
    ```
    --------------------------------------------------------------------------------
            Program         Allocs    Instrs
    --------------------------------------------------------------------------------
             pretty           0.0%     -1.6%
                scc           0.0%     -1.7%
    --------------------------------------------------------------------------------
                Min           0.0%     -1.7%
                Max           0.0%     -0.0%
     Geometric Mean          -0.0%     -0.0%
    ```
    fea9ecdb
    CorePrep: Refactor FloatingBind (#23442)
    Sebastian Graf authored and Marge Bot's avatar Marge Bot committed
    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.
    
    NoFib results (omitted = 0.0%):
    ```
    --------------------------------------------------------------------------------
            Program         Allocs    Instrs
    --------------------------------------------------------------------------------
             pretty           0.0%     -1.6%
                scc           0.0%     -1.7%
    --------------------------------------------------------------------------------
                Min           0.0%     -1.7%
                Max           0.0%     -0.0%
     Geometric Mean          -0.0%     -0.0%
    ```
Loading