Skip to content
  1. May 12, 2010
  2. May 11, 2010
    • Jakob Stoklund Olesen's avatar
      Simplify the tracking of used physregs to a bulk bitor followed by a transitive · 3f0241e0
      Jakob Stoklund Olesen authored
      closure after allocating all blocks.
      
      Add a few more test cases for -regalloc=fast.
      
      llvm-svn: 103500
      3f0241e0
    • Jakob Stoklund Olesen's avatar
      Mostly rewrite RegAllocFast. · f1b3029a
      Jakob Stoklund Olesen authored
      Sorry for the big change. The path leading up to this patch had some TableGen
      changes that I didn't want to commit before I knew they were useful. They
      weren't, and this version does not need them.
      
      The fast register allocator now does no liveness calculations. Instead it relies
      on kill flags provided by isel. (Currently those kill flags are also ignored due
      to isel bugs). The allocation algorithm is supposed to work with any subset of
      valid kill flags. More kill flags simply means fewer spills inserted.
      
      Registers are allocated from a working set that contains no aliases. That means
      most allocations can be done directly without expensive alias checks. When the
      working set runs out of registers we do the full alias check to find new free
      registers.
      
      llvm-svn: 103488
      f1b3029a
    • Evan Cheng's avatar
  3. May 06, 2010
  4. Apr 22, 2010
  5. Apr 21, 2010
    • Jakob Stoklund Olesen's avatar
      Add fast register allocator, enabled with -regalloc=fast. · 8a070a54
      Jakob Stoklund Olesen authored
      So far this is just a clone of -regalloc=local that has been lobotomized to run
      25% faster. It drops the least-recently-used calculations, and is just plain
      stupid when it runs out of registers.
      
      The plan is to make this go even faster for -O0 by taking advantage of the short
      live intervals in unoptimized code. It should not be necessary to calculate
      liveness when most virtual registers are killed 2-3 instructions after they are
      born.
      
      llvm-svn: 102006
      8a070a54
  6. Apr 17, 2010
  7. Apr 08, 2010
  8. Mar 31, 2010
  9. Mar 18, 2010
  10. Mar 16, 2010
  11. Feb 16, 2010
  12. Feb 15, 2010
  13. Feb 10, 2010
  14. Feb 09, 2010
  15. Feb 03, 2010
  16. Feb 02, 2010
  17. Jan 30, 2010
  18. Jan 05, 2010
  19. Dec 16, 2009
    • Dale Johannesen's avatar
      Do better with physical reg operands (typically, from inline asm) · 56f04140
      Dale Johannesen authored
      in local register allocator.  If a reg-reg copy has a phys reg
      input and a virt reg output, and this is the last use of the phys
      reg, assign the phys reg to the virt reg.  If a reg-reg copy has
      a phys reg output and we need to reload its spilled input, reload
      it directly into the phys reg than passing it through another reg.
      
      Following 76208, there is sometimes no dependency between the def of
      a phys reg and its use; this creates a window where that phys reg
      can be used for spilling (this is true in linear scan also).  This
      is bad and needs to be fixed a better way, although 76208 works too
      well in practice to be reverted.  However, there should normally be
      no spilling within inline asm blocks.  The patch here goes a long way
      towards making this actually be true.
      
      llvm-svn: 91485
      56f04140
  20. Nov 12, 2009
    • David Greene's avatar
      · 1fbe0544
      David Greene authored
      Add a bool flag to StackObjects telling whether they reference spill
      slots.  The AsmPrinter will use this information to determine whether to
      print a spill/reload comment.
      
      Remove default argument values.  It's too easy to pass a wrong argument
      value when multiple arguments have default values.  Make everything
      explicit to trap bugs early.
      
      Update all targets to adhere to the new interfaces..
      
      llvm-svn: 87022
      1fbe0544
  21. Oct 25, 2009
  22. Oct 17, 2009
  23. Aug 22, 2009
  24. Aug 01, 2009
  25. Jul 25, 2009
    • Daniel Dunbar's avatar
      More migration to raw_ostream, the water has dried up around the iostream hole. · 0dd5e1ed
      Daniel Dunbar authored
       - Some clients which used DOUT have moved to DEBUG. We are deprecating the
         "magic" DOUT behavior which avoided calling printing functions when the
         statement was disabled. In addition to being unnecessary magic, it had the
         downside of leaving code in -Asserts builds, and of hiding potentially
         unnecessary computations.
      
      llvm-svn: 77019
      0dd5e1ed
  26. Jul 11, 2009
  27. May 08, 2009
    • Bob Wilson's avatar
      Fix pr4100. Do not remove no-op copies when they are dead. The register · e20be418
      Bob Wilson authored
      scavenger gets confused about register liveness if it doesn't see them.
      I'm not thrilled with this solution, but it only comes up when there are dead
      copies in the code, which is something that hopefully doesn't happen much.
      
      Here is what happens in pr4100: As shown in the following excerpt from the
      debug output of llc, the source of a move gets reloaded from the stack,
      inserting a new load instruction before the move.  Since that source operand
      is a kill, the physical register is free to be reused for the destination
      of the move.  The move ends up being a no-op, copying R3 to R3, so it is
      deleted.  But, it leaves behind the load to reload %reg1028 into R3, and
      that load is not updated to show that it's destination operand (R3) is dead.
      The scavenger gets confused by that load because it thinks that R3 is live.
      
      Starting RegAlloc of: %reg1025<def,dead> = MOVr %reg1028<kill>, 14, %reg0, %reg0
        Regs have values: 
        Reloading %reg1028 into R3
        Last use of R3[%reg1028], removing it from live set
        Assigning R3 to %reg1025
        Register R3 [%reg1025] is never used, removing it from live set
      
      Alternative solutions might be either marking the load as dead, or zapping
      the load along with the no-op copy.  I couldn't see an easy way to do
      either of those, though.
      
      llvm-svn: 71196
      e20be418
  28. May 07, 2009
  29. Apr 09, 2009
    • Bob Wilson's avatar
      Fix pr3954. The register scavenger asserts for inline assembly with · 51856173
      Bob Wilson authored
      register destinations that are tied to source operands.  The
      TargetInstrDescr::findTiedToSrcOperand method silently fails for inline
      assembly.  The existing MachineInstr::isRegReDefinedByTwoAddr was very
      close to doing what is needed, so this revision makes a few changes to
      that method and also renames it to isRegTiedToUseOperand (for consistency
      with the very similar isRegTiedToDefOperand and because it handles both
      two-address instructions and inline assembly with tied registers).
      
      llvm-svn: 68714
      51856173
  30. Mar 19, 2009
  31. Jan 29, 2009
Loading