Skip to content
  1. Oct 03, 2009
  2. Sep 04, 2009
  3. Aug 23, 2009
  4. Jul 24, 2009
  5. Jun 14, 2009
  6. May 04, 2009
  7. May 03, 2009
    • Evan Cheng's avatar
      In some rare cases, the register allocator can spill registers but end up not... · 210fc62a
      Evan Cheng authored
      In some rare cases, the register allocator can spill registers but end up not utilizing registers at all. The fundamental problem is linearscan's backtracking can end up freeing more than one allocated registers. However,  reloads and restores might be folded into uses / defs and freed registers might not be used at all.
      
      VirtRegMap keeps track of allocations so it knows what's not used. As a horrible hack, the stack coloring can color spill slots with *free* registers. That is, it replace reload and spills with copies from and to the free register. It unfold instructions that load and store the spill slot and replace them with register using variants.
      
      Not yet enabled. This is part 1. More coming.
      
      llvm-svn: 70787
      210fc62a
  8. Mar 31, 2009
  9. Mar 13, 2009
  10. Mar 11, 2009
  11. Jan 05, 2009
  12. Jun 04, 2008
  13. Apr 11, 2008
  14. Mar 12, 2008
  15. Mar 11, 2008
  16. Feb 27, 2008
  17. Feb 10, 2008
  18. Dec 29, 2007
  19. Dec 05, 2007
  20. Dec 02, 2007
  21. Nov 29, 2007
  22. Nov 28, 2007
  23. Nov 17, 2007
    • Evan Cheng's avatar
      Live interval splitting: · 8e223793
      Evan Cheng authored
      When a live interval is being spilled, rather than creating short, non-spillable
      intervals for every def / use, split the interval at BB boundaries. That is, for
      every BB where the live interval is defined or used, create a new interval that
      covers all the defs and uses in the BB.
      
      This is designed to eliminate one common problem: multiple reloads of the same
      value in a single basic block. Note, it does *not* decrease the number of spills
      since no copies are inserted so the split intervals are *connected* through
      spill and reloads (or rematerialization). The newly created intervals can be
      spilled again, in that case, since it does not span multiple basic blocks, it's
      spilled in the usual manner. However, it can reuse the same stack slot as the
      previously split interval.
      
      This is currently controlled by -split-intervals-at-bb.
      
      llvm-svn: 44198
      8e223793
  24. Oct 13, 2007
    • Evan Cheng's avatar
      Local spiller optimization: · b6307650
      Evan Cheng authored
      Turn this:
      movswl  %ax, %eax
      movl    %eax, -36(%ebp)
      xorl    %edi, -36(%ebp)
      into
      movswl  %ax, %eax
      xorl    %edi, %eax
      movl    %eax, -36(%ebp)
      by unfolding the load / store xorl into an xorl and a store when we know the
      value in the spill slot is available in a register. This doesn't change the
      number of instructions but reduce the number of times memory is accessed.
      
      Also unfold some load folding instructions and reuse the value when similar
      situation presents itself.
      
      llvm-svn: 42947
      b6307650
  25. Aug 14, 2007
  26. Aug 07, 2007
    • David Greene's avatar
      · 99905f16
      David Greene authored
      Add a missing forward declaration.
      
      llvm-svn: 40896
      99905f16
  27. Aug 02, 2007
  28. Apr 04, 2007
  29. Mar 20, 2007
  30. Feb 01, 2007
  31. Dec 17, 2006
  32. Dec 07, 2006
  33. Nov 17, 2006
  34. 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
  35. May 02, 2006
  36. May 01, 2006
Loading