patch applied (ghc): Better calculation of spill costs / selection
of spill candidates.
ben.lippmeier at anu.edu.au
Fri Sep 14 05:33:27 EDT 2007
Thu Sep 13 08:54:07 PDT 2007 Ben.Lippmeier at anu.edu.au
* 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.
M ./compiler/nativeGen/MachRegs.lhs +1
M ./compiler/nativeGen/RegAllocColor.hs -55 +10
M ./compiler/nativeGen/RegAllocStats.hs -8 +16
M ./compiler/nativeGen/RegLiveness.hs -43
More information about the Cvs-ghc