Skip to content
  1. Aug 04, 2005
  2. Aug 02, 2005
  3. Jul 30, 2005
  4. Jul 29, 2005
  5. Jul 27, 2005
  6. Jul 22, 2005
  7. Jul 19, 2005
    • Reid Spencer's avatar
      For: memory operations -> stores · d37d854c
      Reid Spencer authored
      This is the first incremental patch to implement this feature. It adds no
      functionality to LLVM but setup up the information needed from targets in
      order to implement the optimization correctly. Each target needs to specify
      the maximum number of store operations for conversion of the llvm.memset,
      llvm.memcpy, and llvm.memmove intrinsics into a sequence of store operations.
      The limit needs to be chosen at the threshold of performance for such an
      optimization (generally smallish). The target also needs to specify whether
      the target can support unaligned stores for multi-byte store operations.
      This helps ensure the optimization doesn't generate code that will trap on
      an alignment errors.
      More patches to follow.
      
      llvm-svn: 22468
      d37d854c
  8. Jul 16, 2005
    • Nate Begeman's avatar
      Teach the legalizer how to promote SINT_TO_FP to a wider SINT_TO_FP that · 7e74c834
      Nate Begeman authored
      the target natively supports.  This eliminates some special-case code from
      the x86 backend and generates better code as well.
      
      For an i8 to f64 conversion, before & after:
      
      _x87 before:
              subl $2, %esp
              movb 6(%esp), %al
              movsbw %al, %ax
              movw %ax, (%esp)
              filds (%esp)
              addl $2, %esp
              ret
      
      _x87 after:
              subl $2, %esp
              movsbw 6(%esp), %ax
              movw %ax, (%esp)
              filds (%esp)
              addl $2, %esp
              ret
      
      _sse before:
              subl $12, %esp
              movb 16(%esp), %al
              movsbl %al, %eax
              cvtsi2sd %eax, %xmm0
              addl $12, %esp
              ret
      
      _sse after:
              subl $12, %esp
              movsbl 16(%esp), %eax
              cvtsi2sd %eax, %xmm0
              addl $12, %esp
              ret
      
      llvm-svn: 22452
      7e74c834
    • Nate Begeman's avatar
      Teach the register allocator that movaps is also a move instruction · 8293d0e2
      Nate Begeman authored
      llvm-svn: 22451
      8293d0e2
    • Nate Begeman's avatar
      A couple more darwinisms · 57b9ed52
      Nate Begeman authored
      llvm-svn: 22450
      57b9ed52
    • Chris Lattner's avatar
      Remove all knowledge of UINT_TO_FP from the X86 backend, relying on the · 507a2759
      Chris Lattner authored
      legalizer to eliminate them.  With this comes the expected code quality
      improvements, such as, for this:
      
      double foo(unsigned short X) { return X; }
      
      we now generate this:
      
      _foo:
              subl $4, %esp
              movzwl 8(%esp), %eax
              movl %eax, (%esp)
              fildl (%esp)
              addl $4, %esp
              ret
      
      instead of this:
      
      _foo:
              subl $4, %esp
              movw 8(%esp), %ax
              movzwl %ax, %eax   ;; Load not folded into this.
              movl %eax, (%esp)
              fildl (%esp)
              addl $4, %esp
              ret
      
      -Chris
      
      llvm-svn: 22449
      507a2759
  9. Jul 15, 2005
  10. Jul 12, 2005
  11. Jul 11, 2005
  12. Jul 10, 2005
  13. Jul 08, 2005
  14. Jul 07, 2005
  15. Jul 06, 2005
    • Nate Begeman's avatar
      First round of support for doing scalar FP using the SSE2 ISA extension and · 8a093360
      Nate Begeman authored
      XMM registers.  There are many known deficiencies and fixmes, which will be
      addressed ASAP.  The major benefit of this work is that it will allow the
      LLVM register allocator to allocate FP registers across basic blocks.
      
      The x86 backend will still default to x87 style FP.  To enable this work,
      you must pass -enable-sse-scalar-fp and either -sse2 or -sse3 to llc.
      
      An example before and after would be for:
      double foo(double *P) { double Sum = 0; int i; for (i = 0; i < 1000; ++i)
                              Sum += P[i]; return Sum; }
      
      The inner loop looks like the following:
      x87:
      .LBB_foo_1:     # no_exit
              fldl (%esp)
              faddl (%eax,%ecx,8)
              fstpl (%esp)
              incl %ecx
              cmpl $1000, %ecx
              #FP_REG_KILL
              jne .LBB_foo_1  # no_exit
      
      SSE2:
              addsd (%eax,%ecx,8), %xmm0
              incl %ecx
              cmpl $1000, %ecx
              #FP_REG_KILL
              jne .LBB_foo_1  # no_exit
      
      llvm-svn: 22340
      8a093360
  16. Jul 05, 2005
    • Chris Lattner's avatar
      Make several cleanups to Andrews varargs change: · a7220851
      Chris Lattner authored
      1. Pass Value*'s into lowering methods so that the proper pointers can be
         added to load/stores from the valist
      2. Intrinsics that return void should only return a token chain, not a token
         chain/retval pair.
      3. Rename LowerVAArgNext -> LowerVAArg, because VANext is long gone.
      4. Now that we have Value*'s available in the lowering methods, pass them
         into any load/stores from the valist that are emitted
      
      llvm-svn: 22339
      a7220851
    • Chris Lattner's avatar
      Fit to 80 columns · 91ae129b
      Chris Lattner authored
      llvm-svn: 22336
      91ae129b
  17. Jul 03, 2005
  18. Jul 02, 2005
Loading