Skip to content
  1. Apr 20, 2011
    • Jakob Stoklund Olesen's avatar
      Prefer cheap registers for busy live ranges. · 0e34c1df
      Jakob Stoklund Olesen authored
      On the x86-64 and thumb2 targets, some registers are more expensive to encode
      than others in the same register class.
      
      Add a CostPerUse field to the TableGen register description, and make it
      available from TRI->getCostPerUse. This represents the cost of a REX prefix or a
      32-bit instruction encoding required by choosing a high register.
      
      Teach the greedy register allocator to prefer cheap registers for busy live
      ranges (as indicated by spill weight).
      
      llvm-svn: 129864
      0e34c1df
  2. Apr 13, 2011
  3. Apr 12, 2011
  4. Apr 11, 2011
  5. Apr 09, 2011
  6. Apr 07, 2011
  7. Apr 06, 2011
  8. Apr 05, 2011
  9. Apr 04, 2011
  10. Apr 02, 2011
  11. Mar 30, 2011
    • Jakob Stoklund Olesen's avatar
      Treat clones the same as their origin. · dd9a2ece
      Jakob Stoklund Olesen authored
      When DCE clones a live range because it separates into connected components,
      make sure that the clones enter the same register allocator stage as the
      register they were cloned from.
      
      For instance, clones may be split even when they where created during spilling.
      Other registers created during spilling are not candidates for splitting or even
      (re-)spilling.
      
      llvm-svn: 128524
      dd9a2ece
  12. Mar 29, 2011
  13. Mar 28, 2011
  14. Mar 20, 2011
  15. Mar 16, 2011
  16. Mar 13, 2011
  17. Mar 10, 2011
  18. Mar 09, 2011
  19. Mar 07, 2011
  20. Mar 05, 2011
  21. Mar 04, 2011
  22. Mar 03, 2011
  23. Mar 02, 2011
  24. Mar 01, 2011
    • Jakob Stoklund Olesen's avatar
      Keep track of which stage produced a live range, and bypass earlier stages when revisiting. · 5f9f081d
      Jakob Stoklund Olesen authored
      This effectively disables the 'turbo' functionality of the greedy register
      allocator where all new live ranges created by splitting would be reconsidered
      as if they were originals.
      
      There are two reasons for doing this, 1. It guarantees that the algorithm
      terminates. Early versions were prone to infinite looping in certain corner
      cases. 2. It is a 2x speedup. We can skip a lot of unnecessary interference
      checks that won't lead to good splitting anyway.
      
      The problem is that region splitting only gets one shot, so it should probably
      be changed to target multiple physical registers at once.
      
      Local live range splitting is still 'turbo' enabled. It only accounts for a
      small fraction of compile time, so it is probably not necessary to do anything
      about that.
      
      llvm-svn: 126781
      5f9f081d
  25. Feb 25, 2011
Loading