Skip to content
  1. Jul 13, 2010
  2. Jun 29, 2010
  3. Jun 26, 2010
    • Jakob Stoklund Olesen's avatar
      Don't track kills in VNInfo. Use interval ends instead. · 55d738e2
      Jakob Stoklund Olesen authored
      The VNInfo.kills vector was almost unused except for all the code keeping it
      updated. The few places using it were easily rewritten to check for interval
      ends instead.
      
      The two new methods LiveInterval::killedAt and killedInRange are replacements.
      
      This brings us down to 3 independent data structures tracking kills.
      
      llvm-svn: 106905
      55d738e2
  4. Jun 25, 2010
  5. Jun 23, 2010
  6. Mar 30, 2010
  7. Jan 12, 2010
  8. Jan 04, 2010
    • David Greene's avatar
      · c2155323
      David Greene authored
      Change errs() to dbgs().
      
      llvm-svn: 92528
      c2155323
  9. Dec 09, 2009
    • Lang Hames's avatar
      Added a new "splitting" spiller. · 1ab2b49e
      Lang Hames authored
      When a call is placed to spill an interval this spiller will first try to
      break the interval up into its component values. Single value intervals and
      intervals which have already been split (or are the result of previous splits)
      are spilled by the default spiller.
      
      Splitting intervals as described above may improve the performance of generated
      code in some circumstances. This work is experimental however, and it still
      miscompiles many benchmarks. It's not recommended for general use yet.
      
      llvm-svn: 90951
      1ab2b49e
  10. Nov 04, 2009
    • Lang Hames's avatar
      The Indexes Patch. · 05fb9637
      Lang Hames authored
      This introduces a new pass, SlotIndexes, which is responsible for numbering
      instructions for register allocation (and other clients). SlotIndexes numbering
      is designed to match the existing scheme, so this patch should not cause any
      changes in the generated code.
      
      For consistency, and to avoid naming confusion, LiveIndex has been renamed
      SlotIndex.
      
      The processImplicitDefs method of the LiveIntervals analysis has been moved
      into its own pass so that it can be run prior to SlotIndexes. This was
      necessary to match the existing numbering scheme.
      
      llvm-svn: 85979
      05fb9637
  11. Oct 03, 2009
  12. Sep 12, 2009
  13. Sep 04, 2009
  14. Aug 23, 2009
  15. Aug 11, 2009
  16. Jul 24, 2009
  17. Jul 23, 2009
    • David Greene's avatar
      · 1164d1f2
      David Greene authored
      Reorder if-else branches as suggested by Bill.
      
      llvm-svn: 76808
      1164d1f2
  18. Jul 22, 2009
    • David Greene's avatar
      · 1e2a04ba
      David Greene authored
      Make some changes suggested by Bill and Evan.
      
      llvm-svn: 76775
      1e2a04ba
    • David Greene's avatar
      · 34242753
      David Greene authored
      Add some support for iterative coalescers to calculate a joined live
      range's weight properly.  This is turned off right now in the sense that
      you'll get an assert if you get into a situation that can only be caused
      by an iterative coalescer.  All other code paths operate exactly as
      before so there is no functional change with this patch.  The asserts
      should be disabled if/when an iterative coalescer gets added to trunk.
      
      llvm-svn: 76680
      34242753
  19. Jul 09, 2009
    • Lang Hames's avatar
      Improved tracking of value number kills. VN kills are now represented · dab7b06d
      Lang Hames authored
      as an (index,bool) pair. The bool flag records whether the kill is a
      PHI kill or not. This code will be used to enable splitting of live
      intervals containing PHI-kills.
      
      A slight change to live interval weights introduced an extra spill
      into lsr-code-insertion (outside the critical sections). The test 
      condition has been updated to reflect this.
      
      llvm-svn: 75097
      dab7b06d
  20. Jun 24, 2009
  21. Jun 17, 2009
  22. Jun 15, 2009
    • Evan Cheng's avatar
      Part 1. · 1283c6a0
      Evan Cheng authored
      - Change register allocation hint to a pair of unsigned integers. The hint type is zero (which means prefer the register specified as second part of the pair) or entirely target dependent.
      - Allow targets to specify alternative register allocation orders based on allocation hint.
      
      Part 2.
      - Use the register allocation hint system to implement more aggressive load / store multiple formation.
      - Aggressively form LDRD / STRD. These are formed *before* register allocation. It has to be done this way to shorten live interval of base and offset registers. e.g.
      v1025 = LDR v1024, 0
      v1026 = LDR v1024, 0
      =>
      v1025,v1026 = LDRD v1024, 0
      
      If this transformation isn't done before allocation, v1024 will overlap v1025 which means it more difficult to allocate a register pair.
      
      - Even with the register allocation hint, it may not be possible to get the desired allocation. In that case, the post-allocation load / store multiple pass must fix the ldrd / strd instructions. They can either become ldm / stm instructions or back to a pair of ldr / str instructions.
      
      This is work in progress, not yet enabled.
      
      llvm-svn: 73381
      1283c6a0
  23. Jun 14, 2009
  24. Jun 02, 2009
  25. Apr 28, 2009
  26. Apr 27, 2009
  27. Apr 25, 2009
  28. Apr 18, 2009
  29. Apr 08, 2009
    • Dan Gohman's avatar
      Implement support for using modeling implicit-zero-extension on x86-64 · ad3e549a
      Dan Gohman authored
      with SUBREG_TO_REG, teach SimpleRegisterCoalescing to coalesce
      SUBREG_TO_REG instructions (which are similar to INSERT_SUBREG
      instructions), and teach the DAGCombiner to take advantage of this on
      targets which support it. This eliminates many redundant
      zero-extension operations on x86-64.
      
      This adds a new TargetLowering hook, isZExtFree. It's similar to
      isTruncateFree, except it only applies to actual definitions, and not
      no-op truncates which may not zero the high bits.
      
      Also, this adds a new optimization to SimplifyDemandedBits: transform
      operations like x+y into (zext (add (trunc x), (trunc y))) on targets
      where all the casts are no-ops. In contexts where the high part of the
      add is explicitly masked off, this allows the mask operation to be
      eliminated. Fix the DAGCombiner to avoid undoing these transformations
      to eliminate casts on targets where the casts are no-ops.
      
      Also, this adds a new two-address lowering heuristic. Since
      two-address lowering runs before coalescing, it helps to be able to
      look through copies when deciding whether commuting and/or
      three-address conversion are profitable.
      
      Also, fix a bug in LiveInterval::MergeInClobberRanges. It didn't handle
      the case that a clobber range extended both before and beyond an
      existing live range. In that case, multiple live ranges need to be
      added. This was exposed by the new subreg coalescing code.
      
      Remove 2008-05-06-SpillerBug.ll. It was bugpoint-reduced, and the
      spiller behavior it was looking for no longer occurrs with the new
      instruction selection.
      
      llvm-svn: 68576
      ad3e549a
  30. Mar 11, 2009
    • Evan Cheng's avatar
      Two coalescer fixes in one. · 64b3f9d7
      Evan Cheng authored
      1. Use the same value# to represent unknown values being merged into sub-registers.
      2. When coalescer commute an instruction and the destination is a physical register, update its sub-registers by merging in the extended ranges.
      
      llvm-svn: 66610
      64b3f9d7
  31. Feb 02, 2009
  32. Jan 29, 2009
  33. Sep 24, 2008
Loading