Skip to content
  1. 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
  2. Oct 15, 2010
  3. Oct 07, 2010
  4. Sep 29, 2010
  5. Sep 14, 2010
  6. Sep 10, 2010
  7. 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
  8. Aug 10, 2010
  9. Aug 06, 2010
  10. Jul 20, 2010
  11. Jul 19, 2010
  12. Jul 17, 2010
  13. Jul 07, 2010
  14. 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
  15. Jun 15, 2010
  16. 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
  17. 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
  18. Apr 02, 2010
  19. Mar 02, 2010
  20. Feb 15, 2010
  21. 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
  22. Feb 02, 2010
  23. Jan 19, 2010
  24. Jan 15, 2010
  25. Jan 13, 2010
  26. Dec 14, 2009
  27. Dec 02, 2009
  28. Nov 26, 2009
    • Bob Wilson's avatar
      Split tail duplication into a separate pass. This is needed to avoid · 2d4ff12d
      Bob Wilson authored
      running tail duplication when doing branch folding for if-conversion, and
      we also want to be able to run tail duplication earlier to fix some
      reg alloc problems.  Move the CanFallThrough function from BranchFolding
      to MachineBasicBlock so that it can be shared by TailDuplication.
      
      llvm-svn: 89904
      2d4ff12d
  29. Nov 04, 2009
  30. Oct 26, 2009
  31. Oct 08, 2009
  32. Sep 17, 2009
  33. Sep 16, 2009
  34. Aug 23, 2009
Loading