1. 14 Sep, 2007 1 commit
    • Ben.Lippmeier@anu.edu.au's avatar
      Change spill cost function back to inverse length of live range. · 26248bad
      Ben.Lippmeier@anu.edu.au authored
      On further testing it turns out that using Chaitin's spill cost formula
      of counting the number of uses of a var and then dividing by the degree
      of the node isn't actually a win. Perhaps because this isn't counting 
      the number of actual spills inserted in the output code.
      
      This would be worth revisiting if other work manages to increase the 
      register pressure in the native code.
      26248bad
  2. 13 Sep, 2007 1 commit
    • 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