Skip to content
  1. May 09, 2006
  2. May 08, 2006
  3. May 07, 2006
  4. May 06, 2006
  5. 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
  6. May 04, 2006
Loading