Better calculation of spill costs / selection of spill candidates.
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.
Showing with 260 additions and 106 deletions