Thu Sep 13 08:54:07 PDT 2007  [EMAIL PROTECTED]
  * 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
    A ./compiler/nativeGen/RegSpillCost.hs

_______________________________________________
Cvs-ghc mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/cvs-ghc

Reply via email to