Skip to content
  • Andreas Klebinger's avatar
    Cmm.Sink: Optimize retaining of assignments, live sets. · aef44d7f
    Andreas Klebinger authored and Marge Bot's avatar Marge Bot committed
    Sinking requires us to track live local regs after each
    cmm statement. We used to do this via "Set LocalReg".
    
    However we can replace this with a solution based on IntSet
    which is overall more efficient without losing much. The thing
    we lose is width of the variables, which isn't used by the sinking
    pass anyway.
    
    I also reworked how we keep assignments to regs mentioned in
    skipped assignments. I put the details into
    Note [Keeping assignemnts mentioned in skipped RHSs].
    
    The gist of it is instead of keeping track of it via the use count
    which is a `IntMap Int` we now use the live regs set (IntSet) which
    is quite a bit faster.
    
    I think it also matches the semantics a lot better. The skipped
    (not discarded) assignment does in fact keep the regs on it's rhs
    alive so keeping track of this in the live set seems like the clearer
    solution as well.
    
    Improves allocations for T3294 by yet another 1%.
    aef44d7f