Skip to content
  1. Jun 27, 2011
  2. Jun 26, 2011
  3. Jun 07, 2011
    • Jakob Stoklund Olesen's avatar
      Simplify local live range splitting's safeguard to fix PR10070. · df476270
      Jakob Stoklund Olesen authored
      When local live range splitting creates a live range with the same
      number of instructions as the old range, mark it as RS_Local. When such
      a range is seen again, require that it be split in a way that reduces
      the number of instructions. That guarantees we are making progress while
      still being able to perform 3 -> 2+3 splits as required by PR10070.
      
      This also means that the PrevSlot map is no longer needed. This was also
      used to estimate new spill weights, but that is no longer necessary
      after slotIndexes::insertMachineInstrInMaps() got the extra Late
      insertion argument.
      
      llvm-svn: 132697
      df476270
  4. Jun 03, 2011
  5. Jun 01, 2011
  6. May 31, 2011
    • Jakob Stoklund Olesen's avatar
      Simplify the eviction policy by making the failsafe explicit. · 73e18b7a
      Jakob Stoklund Olesen authored
      When assigned ranges are evicted, they are put in the RS_Evicted stage and are
      not allowed to evict anything else. That prevents looping automatically.
      
      When evicting ranges just to get a cheaper register, use only spill weights to
      find the possible candidates. Avoid breaking hints for this purpose, it is not
      worth it.
      
      Start implementing more complex eviction heuristics, guarded by the temporary
      -complex-eviction flag. The initial version permits a heavier range to be
      evicted if it doesn't have any uses where the evicting range is live. This makes
      it a good candidate for live ranfge splitting.
      
      llvm-svn: 132358
      73e18b7a
  7. May 30, 2011
  8. May 29, 2011
  9. May 28, 2011
    • Jakob Stoklund Olesen's avatar
      Create two BlockInfo entries when a live range is discontinuous through a block. · fd3f71ef
      Jakob Stoklund Olesen authored
      Delete the Kill and Def markers in BlockInfo. They are no longer
      necessary when BlockInfo describes a continuous live range.
      
      This only affects the relatively rare kind of basic block where a live
      range looks like this:
      
       |---x   o---|
      
      Now live range splitting can pretend that it is looking at two blocks:
      
       |---x
               o---|
      
      This allows the code to be simplified a bit.
      
      llvm-svn: 132245
      fd3f71ef
    • Jakob Stoklund Olesen's avatar
      Add SplitAnalysis::getNumLiveBlocks(). · 5cc91b26
      Jakob Stoklund Olesen authored
      It is important that this function returns the same number of live blocks as
      countLiveBlocks(CurLI) because live range splitting uses the number of live
      blocks to ensure it is making progress.
      
      This is in preparation of supporting duplicate UseBlock entries for basic blocks
      that have a virtual register live-in and live-out, but not live-though.
      
      llvm-svn: 132244
      5cc91b26
  10. May 26, 2011
    • Jakob Stoklund Olesen's avatar
      Add a RAGreedy::canEvict function. · 25d5745c
      Jakob Stoklund Olesen authored
      This doesn't change functionality (much), but it allows for a more fine-grained
      eviction policy. The current policy only compares spill weights, and that is not
      always the best thing to do.  Spill weights are designed to serve linear scan,
      and they don't consider live range splitting.
      
      Add a mechanism so canEvict() can request that a live range be evicted and
      split/spilled. This is to avoid infinite eviction loops.
      
      llvm-svn: 132101
      25d5745c
  11. May 10, 2011
  12. May 06, 2011
  13. May 03, 2011
    • Jakob Stoklund Olesen's avatar
      Gracefully handle invalid live ranges. Fix PR9831. · eaa6ed1a
      Jakob Stoklund Olesen authored
      Register coalescing can sometimes create live ranges that end in the middle of a
      basic block without any killing instruction. When SplitKit detects this, it will
      repair the live range by shrinking it to its uses.
      
      Live range splitting also needs to know about this. When the range shrinks so
      much that it becomes allocatable, live range splitting fails because it can't
      find a good split point. It is paranoid about making progress, so an allocatable
      range is considered an error.
      
      The coalescer should really not be creating these bad live ranges. They appear
      when coalescing dead copies.
      
      llvm-svn: 130787
      eaa6ed1a
  14. Apr 30, 2011
  15. Apr 27, 2011
  16. Apr 23, 2011
  17. 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
  18. 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
  19. Apr 13, 2011
  20. Apr 12, 2011
  21. Apr 11, 2011
  22. Apr 09, 2011
  23. Apr 07, 2011
  24. Apr 06, 2011
  25. Apr 05, 2011
  26. Apr 04, 2011
  27. Apr 02, 2011
  28. 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
  29. Mar 29, 2011
  30. Mar 28, 2011
Loading