Skip to content
  1. May 08, 2009
    • Bob Wilson's avatar
      Fix pr4100. Do not remove no-op copies when they are dead. The register · e20be418
      Bob Wilson authored
      scavenger gets confused about register liveness if it doesn't see them.
      I'm not thrilled with this solution, but it only comes up when there are dead
      copies in the code, which is something that hopefully doesn't happen much.
      
      Here is what happens in pr4100: As shown in the following excerpt from the
      debug output of llc, the source of a move gets reloaded from the stack,
      inserting a new load instruction before the move.  Since that source operand
      is a kill, the physical register is free to be reused for the destination
      of the move.  The move ends up being a no-op, copying R3 to R3, so it is
      deleted.  But, it leaves behind the load to reload %reg1028 into R3, and
      that load is not updated to show that it's destination operand (R3) is dead.
      The scavenger gets confused by that load because it thinks that R3 is live.
      
      Starting RegAlloc of: %reg1025<def,dead> = MOVr %reg1028<kill>, 14, %reg0, %reg0
        Regs have values: 
        Reloading %reg1028 into R3
        Last use of R3[%reg1028], removing it from live set
        Assigning R3 to %reg1025
        Register R3 [%reg1025] is never used, removing it from live set
      
      Alternative solutions might be either marking the load as dead, or zapping
      the load along with the no-op copy.  I couldn't see an easy way to do
      either of those, though.
      
      llvm-svn: 71196
      e20be418
  2. May 07, 2009
  3. Apr 09, 2009
    • Bob Wilson's avatar
      Fix pr3954. The register scavenger asserts for inline assembly with · 51856173
      Bob Wilson authored
      register destinations that are tied to source operands.  The
      TargetInstrDescr::findTiedToSrcOperand method silently fails for inline
      assembly.  The existing MachineInstr::isRegReDefinedByTwoAddr was very
      close to doing what is needed, so this revision makes a few changes to
      that method and also renames it to isRegTiedToUseOperand (for consistency
      with the very similar isRegTiedToDefOperand and because it handles both
      two-address instructions and inline assembly with tied registers).
      
      llvm-svn: 68714
      51856173
  4. Mar 19, 2009
  5. Jan 29, 2009
  6. Jan 20, 2009
  7. Dec 05, 2008
  8. Nov 24, 2008
  9. Oct 14, 2008
  10. Oct 08, 2008
  11. Oct 04, 2008
  12. Oct 03, 2008
  13. Sep 25, 2008
  14. Sep 13, 2008
    • Dan Gohman's avatar
      Remove isImm(), isReg(), and friends, in favor of · 38453eeb
      Dan Gohman authored
      isImmediate(), isRegister(), and friends, to avoid confusion
      about having two different names with the same meaning. I'm
      not attached to the longer names, and would be ok with
      changing to the shorter names if others prefer it.
      
      llvm-svn: 56189
      38453eeb
  15. Sep 04, 2008
  16. Aug 22, 2008
  17. Jul 10, 2008
  18. Jul 09, 2008
  19. May 28, 2008
  20. May 13, 2008
  21. Apr 02, 2008
  22. Mar 05, 2008
  23. Feb 29, 2008
  24. Feb 26, 2008
  25. Feb 22, 2008
    • Evan Cheng's avatar
      Really really bad local register allocator bug. On X86, it was never using... · 52c15b3e
      Evan Cheng authored
      Really really bad local register allocator bug. On X86, it was never using ESI, EDI, and EBP because of a bug in RALocal::isPhysRegAvailable(). For example, when
      it checks if ESI is available, it then looks at registers aliases to ESI. SIL is marked -2 (not allocatable) but isPhysRegAvailable() incorrectly assumes it is in use and returns false for ESI.
      
      llvm-svn: 47499
      52c15b3e
Loading