Skip to content
  1. Apr 03, 2007
  2. Mar 28, 2007
  3. Mar 20, 2007
    • Chris Lattner's avatar
      Two changes: · 3e1d917e
      Chris Lattner authored
      1) codegen a shift of a register as a shift, not an LEA.
      2) teach the RA to convert a shift to an LEA instruction if it wants something
         in three-address form.
      
      This gives us asm diffs like:
      
      -       leal (,%eax,4), %eax
      +       shll $2, %eax
      
      which is faster on some processors and smaller on all of them.
      
      and, more interestingly:
      
      -       movl 24(%esi), %eax
      -       leal (,%eax,4), %edi
      +       movl 24(%esi), %edi
      +       shll $2, %edi
      
      Without #2, #1 was a significant pessimization in some cases.
      
      This implements CodeGen/X86/shift-codegen.ll
      
      llvm-svn: 35204
      3e1d917e
  4. Mar 08, 2007
  5. Jan 26, 2007
  6. Dec 01, 2006
  7. Nov 28, 2006
  8. Nov 17, 2006
  9. Nov 15, 2006
  10. Nov 14, 2006
  11. Oct 30, 2006
  12. Oct 28, 2006
  13. Oct 21, 2006
  14. Oct 20, 2006
  15. Oct 18, 2006
  16. Oct 13, 2006
  17. Sep 29, 2006
  18. Sep 08, 2006
  19. Sep 05, 2006
    • Chris Lattner's avatar
      Fix a long-standing wart in the code generator: two-address instruction lowering · 13a5dcdd
      Chris Lattner authored
      actually *removes* one of the operands, instead of just assigning both operands
      the same register.  This make reasoning about instructions unnecessarily complex,
      because you need to know if you are before or after register allocation to match
      up operand #'s with the target description file.
      
      Changing this also gets rid of a bunch of hacky code in various places.
      
      This patch also includes changes to fold loads into cmp/test instructions in
      the X86 backend, along with a significant simplification to the X86 spill
      folding code.
      
      llvm-svn: 30108
      13a5dcdd
  20. Jul 25, 2006
  21. May 31, 2006
  22. May 30, 2006
  23. May 19, 2006
  24. May 11, 2006
  25. 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
  26. Apr 18, 2006
  27. Apr 03, 2006
  28. Mar 25, 2006
  29. Mar 21, 2006
  30. 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
  31. Feb 02, 2006
Loading