Skip to content
  1. Apr 21, 2011
    • Jakob Stoklund Olesen's avatar
      Allow allocatable ranges from global live range splitting to be split again. · 6a663b8d
      Jakob Stoklund Olesen authored
      These intervals are allocatable immediately after splitting, but they may be
      evicted because of later splitting. This is rare, but when it happens they
      should be split again.
      
      The remainder intervals that cannot be allocated after splitting still move
      directly to spilling.
      
      SplitEditor::finish can optionally provide a mapping from new live intervals
      back to the original interval indexes returned by openIntv().
      
      Each original interval index can map to multiple new intervals after connected
      components have been separated. Dead code elimination may also add existing
      intervals to the list.
      
      The reverse mapping allows the SplitEditor client to treat the new intervals
      differently depending on the split region they came from.
      
      llvm-svn: 129925
      6a663b8d
  2. 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
  3. Apr 13, 2011
  4. Apr 12, 2011
  5. Apr 11, 2011
  6. Apr 09, 2011
  7. Apr 07, 2011
  8. Apr 06, 2011
  9. Apr 05, 2011
  10. Apr 04, 2011
  11. Apr 02, 2011
  12. 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
  13. Mar 29, 2011
  14. Mar 28, 2011
  15. Mar 20, 2011
  16. Mar 16, 2011
  17. Mar 13, 2011
  18. Mar 10, 2011
  19. Mar 09, 2011
  20. Mar 07, 2011
  21. Mar 05, 2011
  22. Mar 04, 2011
  23. Mar 03, 2011
  24. Mar 02, 2011
  25. 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
Loading