Skip to content
  1. Jan 02, 2005
    • Chris Lattner's avatar
      Make the 2-address instruction lowering pass smarter in two ways: · 9590870a
      Chris Lattner authored
      1. If we are two-addressing a commutable instruction and the LHS is not the
         last use of the variable, see if the instruction is the last use of the
         RHS.  If so, commute the instruction, allowing us to avoid a
         register-register copy in many cases for common instructions like ADD, OR,
         AND, etc on X86.
      2. If #1 doesn't hold, and if this is an instruction that also existing in
         3-address form, promote the instruction to a 3-address instruction to
         avoid the register-register copy.  We can do this for several common
         instructions in X86, including ADDrr, INC, DEC, etc.
      
      This patch implements test/Regression/CodeGen/X86/commute-two-addr.ll,
      overlap-add.ll, and overlap-shift.ll when I check in the X86 support for it.
      
      llvm-svn: 19245
      9590870a
  2. Dec 15, 2004
  3. Dec 07, 2004
  4. Dec 04, 2004
  5. Nov 28, 2004
  6. Nov 22, 2004
  7. Nov 21, 2004
  8. Nov 20, 2004
  9. Nov 19, 2004
  10. Nov 18, 2004
  11. Nov 16, 2004
  12. Nov 05, 2004
  13. Oct 28, 2004
  14. Oct 26, 2004
  15. Oct 25, 2004
  16. Oct 22, 2004
  17. Oct 19, 2004
  18. Oct 16, 2004
  19. Oct 15, 2004
    • Chris Lattner's avatar
      Allow machine operands to represent global variables with offsets. This is · 3065220d
      Chris Lattner authored
      useful when you have a reference like:
      
      int A[100];
      
      void foo() { A[10] = 1; }
      
      In this case, &A[10] is a single constant and should be treated as such.
      
      Only MO_GlobalAddress and MO_ExternalSymbol are allowed to use this field, no
      other operand type is.
      
      This is another fine patch contributed by Jeff Cohen!!
      
      llvm-svn: 17007
      3065220d
    • Chris Lattner's avatar
      This patch fixes the nasty bug that caused 175.vpr to fail for X86 last night. · 21522363
      Chris Lattner authored
      The problem occurred when trying to reload this instruction:
      
      MOV32mr %reg2326, 8, %reg2297, 4, %reg2295
      
      The value of reg2326 was available in EBX, so it was reused from there, instead
      of reloading it into EDX.
      
      The value of reg2297 was available in EDX, so it was reused from there, instead
      of reloading it into EDI.
      
      The value of reg2295 was not available, so we tried reloading it into EBX, its
      assigned register.  However, we checked and saw that we already reloaded
      something into EBX, so we chose what reg2326 was assigned to (EDX) and reloaded
      into that register instead.
      
      Unfortunately EDX had already been used by reg2297, so reloading into EDX
      clobbered the value used by the reg2326 operand, breaking the program.
      
      The fix for this is to check that the newly picked register is ok.  In this
      case we now find that EDX is already used and try using EDI, which succeeds.
      
      llvm-svn: 17006
      21522363
    • Chris Lattner's avatar
      9af0572a
  20. Oct 13, 2004
  21. Oct 11, 2004
Loading