Skip to content
  1. May 19, 2006
  2. May 11, 2006
  3. May 08, 2006
    • Evan Cheng's avatar
      Fixing truncate. Previously we were emitting truncate from r16 to r8 as · 9733bde7
      Evan Cheng authored
      movw. That is we promote the destination operand to r16. So
              %CH = TRUNC_R16_R8 %BP
      is emitted as
              movw %bp, %cx.
      
      This is incorrect. If %cl is live, it would be clobbered.
      Ideally we want to do the opposite, that is emitted it as
              movb ??, %ch
      But this is not possible since %bp does not have a r8 sub-register.
      
      We are now defining a new register class R16_ which is a subclass of R16
      containing only those 16-bit registers that have r8 sub-registers (i.e.
      AX - DX). We isel the truncate to two instructions, a MOV16to16_ to copy the
      value to the R16_ class, followed by a TRUNC_R16_R8.
      
      Due to bug 770, the register colaescer is not going to coalesce between R16 and
      R16_. That will be fixed later so we can eliminate the MOV16to16_. Right now, it
      can only be eliminated if we are lucky that source and destination registers are
      the same.
      
      llvm-svn: 28164
      9733bde7
  4. Apr 18, 2006
  5. Apr 03, 2006
  6. Mar 25, 2006
  7. Mar 21, 2006
  8. Feb 16, 2006
    • Evan Cheng's avatar
      1. Use pxor instead of xoraps / xorapd to clear FR32 / FR64 registers. This · 24c461b5
      Evan Cheng authored
         proves to be worth 20% on Ptrdist/ks. Might be related to dependency
         breaking support.
      2. Added FsMOVAPSrr and FsMOVAPDrr as aliases to MOVAPSrr and MOVAPDrr. These
         are used for FR32 / FR64 reg-to-reg copies.
      3. Tell reg-allocator to generate MOVSSrm / MOVSDrm and MOVSSmr / MOVSDmr to
         spill / restore FsMOVAPSrr and FsMOVAPDrr.
      
      llvm-svn: 26241
      24c461b5
  9. Feb 02, 2006
  10. Oct 15, 2005
  11. Jul 16, 2005
  12. 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
  13. Apr 22, 2005
  14. Jan 19, 2005
  15. Jan 02, 2005
  16. Aug 01, 2004
  17. Jul 31, 2004
  18. Feb 29, 2004
  19. Feb 22, 2004
  20. Feb 13, 2004
  21. Feb 10, 2004
  22. Feb 01, 2004
  23. Dec 28, 2003
  24. Nov 11, 2003
  25. Oct 20, 2003
  26. Aug 03, 2003
    • Chris Lattner's avatar
      * Start using tablegen'd instruction descriptions · 05e2f385
      Chris Lattner authored
      * Fix bug in the createNOP method, which was not marking the operands of the
        generated XCHG as useanddef.  I don't think this method is actually used,
        so it wasn't breaking anything, but it should be fixed anyway...
      
      llvm-svn: 7539
      05e2f385
  27. May 24, 2003
Loading