• Ben.Lippmeier@anu.edu.au's avatar
    Better calculation of spill costs / selection of spill candidates. · 220a12e9
    Ben.Lippmeier@anu.edu.au authored
    Use Chaitin's formula for calculation of spill costs.
      Cost to spill some vreg = (num writes + num reads) / degree of node
    
    With 2 extra provisos:
      1) Don't spill vregs that live for only 1 instruction.
      2) Always prefer to spill vregs that live for a number of instructions
           more than 10 times the number of vregs in that class.
    
    Proviso 2 is there to help deal with basic blocks containing very long
    live ranges - SHA1 has live ranges > 1700 instructions. We don't ever
    try to keep these long lived ranges in regs at the expense of others.
    
    Because stack slots are allocated from a global pool, and there is no
    slot coalescing yet, without this condition the allocation of SHA1 dosn't
    converge fast enough and eventually runs out of stack slots.
    
    Prior to this patch we were just choosing to spill the range with the
    longest lifetime, so we didn't bump into this particular problem.
    220a12e9
RegLiveness.hs 20.2 KB