Skip to content
  1. Apr 25, 2009
    • Evan Cheng's avatar
      Do not share a single unknown val# for all the live ranges merged into a... · 362acf8a
      Evan Cheng authored
      Do not share a single unknown val# for all the live ranges merged into a physical sub-register live interval. When coalescer is merging in clobbered virtaul register live interval into a physical register live interval, give each virtual register val# a separate val# in the physical register live interval. Otherwise, the coalescer would have lost track of the definitions   information it needs to make correct coalescing decisions.
      
      llvm-svn: 70026
      362acf8a
  2. Apr 18, 2009
  3. 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
  4. 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
  5. Feb 02, 2009
  6. Jan 29, 2009
  7. Sep 24, 2008
  8. Sep 19, 2008
  9. Aug 14, 2008
  10. Jun 23, 2008
  11. Jun 04, 2008
  12. Feb 26, 2008
  13. Feb 20, 2008
  14. Feb 15, 2008
  15. Feb 13, 2008
  16. Feb 10, 2008
  17. Jan 30, 2008
  18. Jan 14, 2008
  19. Dec 29, 2007
  20. Nov 29, 2007
  21. Oct 17, 2007
  22. Oct 14, 2007
  23. Oct 12, 2007
  24. Sep 06, 2007
  25. Sep 05, 2007
  26. Sep 01, 2007
  27. Aug 31, 2007
  28. Aug 29, 2007
  29. Aug 28, 2007
  30. Aug 14, 2007
  31. Aug 13, 2007
  32. Aug 11, 2007
  33. Aug 08, 2007
Loading