Skip to content
  1. Jul 16, 2011
  2. Jun 28, 2011
  3. Jun 27, 2011
  4. Jun 16, 2011
  5. Jun 02, 2011
    • Jakob Stoklund Olesen's avatar
      Add a RegisterClassInfo class that lazily caches information about · c58894bc
      Jakob Stoklund Olesen authored
      register classes.
      
      It provides information for each register class that cannot be
      determined statically, like:
      
      - The number of allocatable registers in a class after filtering out the
        reserved and invalid registers.
      
      - The preferred allocation order with registers that overlap callee-saved
        registers last.
      
      - The last callee-saved register that overlaps a given physical register.
      
      This information usually doesn't change between functions, so it is
      reused for compiling multiple functions when possible.  The many
      possible combinations of reserved and callee saves registers makes it
      unfeasible to compute this information statically in TableGen.
      
      Use RegisterClassInfo to count available registers in various heuristics
      in SimpleRegisterCoalescing, making the pass run 4% faster.
      
      llvm-svn: 132450
      c58894bc
  6. Apr 02, 2011
  7. Feb 18, 2011
  8. Jan 09, 2011
  9. 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
  10. Jan 04, 2011
  11. 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
  12. Dec 10, 2010
  13. Dec 08, 2010
  14. Dec 05, 2010
  15. 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
  16. Nov 18, 2010
  17. Nov 16, 2010
  18. 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
  19. Oct 15, 2010
  20. Oct 07, 2010
  21. Sep 29, 2010
  22. Sep 14, 2010
  23. Sep 10, 2010
  24. 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
  25. Aug 10, 2010
  26. Aug 06, 2010
  27. Jul 20, 2010
  28. Jul 19, 2010
  29. Jul 17, 2010
  30. Jul 07, 2010
  31. 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
  32. Jun 15, 2010
  33. 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
  34. 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
  35. Apr 02, 2010
Loading