Skip to content
  1. May 11, 2006
  2. May 10, 2006
  3. May 09, 2006
  4. May 08, 2006
  5. May 07, 2006
  6. May 06, 2006
  7. May 05, 2006
    • Chris Lattner's avatar
      Indent multiline asm strings more nicely · a633c313
      Chris Lattner authored
      llvm-svn: 28132
      a633c313
    • Chris Lattner's avatar
      Fold (fpext (load x)) -> (extload x) · 3d265773
      Chris Lattner authored
      llvm-svn: 28130
      3d265773
    • Chris Lattner's avatar
      More aggressively sink GEP offsets into loops. For example, before we · 3e3f2c63
      Chris Lattner authored
      generated:
      
              movl 8(%esp), %eax
              movl %eax, %edx
              addl $4316, %edx
              cmpb $1, %cl
              ja LBB1_2       #cond_false
      LBB1_1: #cond_true
              movl L_QuantizationTables720$non_lazy_ptr, %ecx
              movl %ecx, (%edx)
              movl L_QNOtoQuantTableShift720$non_lazy_ptr, %edx
              movl %edx, 4460(%eax)
              ret
      ...
      
      Now we generate:
      
              movl 8(%esp), %eax
              cmpb $1, %cl
              ja LBB1_2       #cond_false
      LBB1_1: #cond_true
              movl L_QuantizationTables720$non_lazy_ptr, %ecx
              movl %ecx, 4316(%eax)
              movl L_QNOtoQuantTableShift720$non_lazy_ptr, %ecx
              movl %ecx, 4460(%eax)
              ret
      
      ... which uses one fewer register.
      
      llvm-svn: 28129
      3e3f2c63
    • Chris Lattner's avatar
      Fold some common code. · 25a5283a
      Chris Lattner authored
      llvm-svn: 28124
      25a5283a
    • Chris Lattner's avatar
      Implement: · 002ee914
      Chris Lattner authored
        // fold (and (sext x), (sext y)) -> (sext (and x, y))
        // fold (or  (sext x), (sext y)) -> (sext (or  x, y))
        // fold (xor (sext x), (sext y)) -> (sext (xor x, y))
        // fold (and (aext x), (aext y)) -> (aext (and x, y))
        // fold (or  (aext x), (aext y)) -> (aext (or  x, y))
        // fold (xor (aext x), (aext y)) -> (aext (xor x, y))
      
      llvm-svn: 28123
      002ee914
    • Chris Lattner's avatar
      Pull and through and/or/xor. This compiles some bitfield code to: · 5ac42936
      Chris Lattner authored
              mov EAX, DWORD PTR [ESP + 4]
              mov ECX, DWORD PTR [EAX]
              mov EDX, ECX
              add EDX, EDX
              or EDX, ECX
              and EDX, -2147483648
              and ECX, 2147483647
              or EDX, ECX
              mov DWORD PTR [EAX], EDX
              ret
      
      instead of:
      
              sub ESP, 4
              mov DWORD PTR [ESP], ESI
              mov EAX, DWORD PTR [ESP + 8]
              mov ECX, DWORD PTR [EAX]
              mov EDX, ECX
              add EDX, EDX
              mov ESI, ECX
              and ESI, -2147483648
              and EDX, -2147483648
              or EDX, ESI
              and ECX, 2147483647
              or EDX, ECX
              mov DWORD PTR [EAX], EDX
              mov ESI, DWORD PTR [ESP]
              add ESP, 4
              ret
      
      llvm-svn: 28122
      5ac42936
    • Chris Lattner's avatar
      Implement a variety of simplifications for ANY_EXTEND. · 812646aa
      Chris Lattner authored
      llvm-svn: 28121
      812646aa
    • Chris Lattner's avatar
      Factor some code, add these transformations: · 8d6fc201
      Chris Lattner authored
        // fold (and (trunc x), (trunc y)) -> (trunc (and x, y))
        // fold (or  (trunc x), (trunc y)) -> (trunc (or  x, y))
        // fold (xor (trunc x), (trunc y)) -> (trunc (xor x, y))
      
      llvm-svn: 28120
      8d6fc201
    • Jeff Cohen's avatar
      Fix VC++ compilation error. · 78a7f0e0
      Jeff Cohen authored
      llvm-svn: 28117
      78a7f0e0
    • Chris Lattner's avatar
      Sink noop copies into the basic block that uses them. This reduces the number · 7a3ecf79
      Chris Lattner authored
      of cross-block live ranges, and allows the bb-at-a-time selector to always
      coallesce these away, at isel time.
      
      This reduces the load on the coallescer and register allocator.  For example
      on a codec on X86, we went from:
      
         1643 asm-printer           - Number of machine instrs printed
          419 liveintervals         - Number of loads/stores folded into instructions
         1144 liveintervals         - Number of identity moves eliminated after coalescing
         1022 liveintervals         - Number of interval joins performed
          282 liveintervals         - Number of intervals after coalescing
         1304 liveintervals         - Number of original intervals
           86 regalloc              - Number of times we had to backtrack
      1.90232 regalloc              - Ratio of intervals processed over total intervals
           40 spiller               - Number of values reused
          182 spiller               - Number of loads added
          121 spiller               - Number of stores added
          132 spiller               - Number of register spills
            6 twoaddressinstruction - Number of instructions commuted to coalesce
          360 twoaddressinstruction - Number of two-address instructions
      
      to:
      
         1636 asm-printer           - Number of machine instrs printed
          403 liveintervals         - Number of loads/stores folded into instructions
         1155 liveintervals         - Number of identity moves eliminated after coalescing
         1033 liveintervals         - Number of interval joins performed
          279 liveintervals         - Number of intervals after coalescing
         1312 liveintervals         - Number of original intervals
           76 regalloc              - Number of times we had to backtrack
      1.88998 regalloc              - Ratio of intervals processed over total intervals
            1 spiller               - Number of copies elided
           41 spiller               - Number of values reused
          191 spiller               - Number of loads added
          114 spiller               - Number of stores added
          128 spiller               - Number of register spills
            4 twoaddressinstruction - Number of instructions commuted to coalesce
          356 twoaddressinstruction - Number of two-address instructions
      
      On this testcase, this change provides a modest reduction in spill code,
      regalloc iterations, and total instructions emitted.  It increases the number
      of register coallesces.
      
      llvm-svn: 28115
      7a3ecf79
  8. May 04, 2006
Loading