Skip to content
  1. Jan 06, 2011
    • Jakob Stoklund Olesen's avatar
      Add the SpillPlacement analysis pass. · 8e236eac
      Jakob Stoklund Olesen authored
      This pass precomputes CFG block frequency information that can be used by the
      register allocator to find optimal spill code placement.
      
      Given an interference pattern, placeSpills() will compute which basic blocks
      should have the current variable enter or exit in a register, and which blocks
      prefer the stack.
      
      The algorithm is ready to consume block frequencies from profiling data, but for
      now it gets by with the static estimates used for spill weights.
      
      This is a work in progress and still not hooked up to RegAllocGreedy.
      
      llvm-svn: 122938
      8e236eac
  2. Jan 04, 2011
  3. Dec 16, 2010
    • Jakob Stoklund Olesen's avatar
      Add MachineLoopRanges analysis. · 5e977813
      Jakob Stoklund Olesen authored
      A MachineLoopRange contains the intervals of slot indexes covered by the blocks
      in a loop. This representation of the loop blocks is more efficient to compare
      against interfering registers during register coalescing.
      
      llvm-svn: 121917
      5e977813
  4. Dec 10, 2010
  5. Dec 08, 2010
  6. Dec 05, 2010
  7. Nov 30, 2010
    • Jakob Stoklund Olesen's avatar
      Stub out a new LiveDebugVariables pass. · d4900a64
      Jakob Stoklund Olesen authored
      This analysis is going to run immediately after LiveIntervals. It will stay
      alive during register allocation and keep track of user variables mentioned in
      DBG_VALUE instructions.
      
      When the register allocator is moving values between registers and the stack, it
      is very hard to keep track of DBG_VALUE instructions. We usually get it wrong.
      This analysis maintains a data structure that makes it easy to update DBG_VALUE
      instructions.
      
      llvm-svn: 120385
      d4900a64
  8. Nov 18, 2010
  9. Nov 16, 2010
  10. Oct 23, 2010
    • Andrew Trick's avatar
      This is a prototype of an experimental register allocation · 1c24605a
      Andrew Trick authored
      framework. It's purpose is not to improve register allocation per se,
      but to make it easier to develop powerful live range splitting. I call
      it the basic allocator because it is as simple as a global allocator
      can be but provides the building blocks for sophisticated register
      allocation with live range splitting. 
      
      A minimal implementation is provided that trivially spills whenever it
      runs out of registers. I'm checking in now to get high-level design
      and style feedback. I've only done minimal testing. The next step is
      implementing a "greedy" allocation algorithm that does some register
      reassignment and makes better splitting decisions.
      
      llvm-svn: 117174
      1c24605a
  11. Oct 15, 2010
  12. Oct 07, 2010
  13. Sep 29, 2010
  14. Sep 14, 2010
  15. Sep 10, 2010
  16. Aug 14, 2010
    • Ted Kremenek's avatar
      Update CMake build. · da2eba58
      Ted Kremenek authored
      llvm-svn: 111063
      da2eba58
    • Jim Grosbach's avatar
      Add a local stack object block allocation pass. This is still an · a030fa52
      Jim Grosbach authored
      experimental pass that allocates locals relative to one another before
      register allocation and then assigns them to actual stack slots as a block
      later in PEI. This will eventually allow targets with limited index offset
      range to allocate additional base registers (not just FP and SP) to
      more efficiently reference locals, as well as handle situations where
      locals cannot be referenced via SP or FP at all (dynamic stack realignment
      together with variable sized objects, for example). It's currently
      incomplete and almost certainly buggy. Work in progress.
      
      Disabled by default and gated via the -enable-local-stack-alloc command
      line option.
      
      rdar://8277890
      
      llvm-svn: 111059
      a030fa52
  17. Aug 10, 2010
  18. Aug 06, 2010
  19. Jul 20, 2010
  20. Jul 19, 2010
  21. Jul 17, 2010
  22. Jul 07, 2010
  23. Jun 30, 2010
    • Jakob Stoklund Olesen's avatar
      Begin implementation of an inline spiller. · f8889119
      Jakob Stoklund Olesen authored
      InlineSpiller inserts loads and spills immediately instead of deferring to
      VirtRegMap. This is possible now because SlotIndexes allows instructions to be
      inserted and renumbered.
      
      This is work in progress, and is mostly a copy of TrivialSpiller so far. It
      works very well for functions that don't require spilling.
      
      llvm-svn: 107227
      f8889119
  24. Jun 15, 2010
  25. 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
    • Dan Gohman's avatar
      Update CMakeLists.txt. · cc5e6528
      Dan Gohman authored
      llvm-svn: 101976
      cc5e6528
  26. Apr 03, 2010
    • David Greene's avatar
      · 9b063df4
      David Greene authored
      Ok, third time's the charm.  No changes from last time except the CMake
      source addition.  Apparently the buildbots were wrong about failures.
      
      ---
      
      Add some switches helpful for debugging:
      
      -print-before=<Pass Name>
      
      Dump IR before running pass <Pass Name>.
      
      -print-before-all
      
      Dump IR before running each pass.
      
      -print-after-all
      
      Dump IR after running each pass.
      
      These are helpful when tracking down a miscompilation.  It is easy to
      get IR dumps and do diffs on them, etc.
      
      To make this work well, add a new getPrinterPass API to Pass so that
      each kind of pass (ModulePass, FunctionPass, etc.) can create a Pass
      suitable for dumping out the kind of object the Pass works on.
      
      llvm-svn: 100249
      9b063df4
  27. Apr 02, 2010
  28. Mar 02, 2010
  29. Feb 15, 2010
  30. Feb 12, 2010
    • Bob Wilson's avatar
      Add a new pass on machine instructions to optimize away PHI cycles that · 0827e040
      Bob Wilson authored
      reduce down to a single value.  InstCombine already does this transformation
      but DAG legalization may introduce new opportunities.  This has turned out to
      be important for ARM where 64-bit values are split up during type legalization:
      InstCombine is not able to remove the PHI cycles on the 64-bit values but
      the separate 32-bit values can be optimized.  I measured the compile time 
      impact of this (running llc on 176.gcc) and it was not significant.
      
      llvm-svn: 95951
      0827e040
  31. Feb 02, 2010
  32. Jan 19, 2010
  33. Jan 15, 2010
  34. Jan 13, 2010
  35. Dec 14, 2009
Loading