Skip to content
  1. Feb 03, 2011
    • Eric Christopher's avatar
      Reapply this. · ede62679
      Eric Christopher authored
      llvm-svn: 124779
      ede62679
    • Eric Christopher's avatar
    • Jakob Stoklund Olesen's avatar
      Defer SplitKit value mapping until all defs are available. · dca2917e
      Jakob Stoklund Olesen authored
      The greedy register allocator revealed some problems with the value mapping in
      SplitKit. We would sometimes start mapping values before all defs were known,
      and that could change a value from a simple 1-1 mapping to a multi-def mapping
      that requires ssa update.
      
      The new approach collects all defs and register assignments first without
      filling in any live intervals. Only when finish() is called, do we compute
      liveness and mapped values. At this time we know with certainty which values map
      to multiple values in a split range.
      
      This also has the advantage that we can compute live ranges based on the
      remaining uses after rematerializing at split points.
      
      The current implementation has many opportunities for compile time optimization.
      
      llvm-svn: 124765
      dca2917e
  2. Jan 26, 2011
  3. Jan 20, 2011
  4. Jan 19, 2011
    • Jakob Stoklund Olesen's avatar
      Implement RAGreedy::splitAroundRegion and remove loop splitting. · 9fb04015
      Jakob Stoklund Olesen authored
      Region splitting includes loop splitting as a subset, and it is more generic.
      The splitting heuristics for variables that are live in more than one block are
      now:
      
      1. Try to create a region that covers multiple basic blocks.
      2. Try to create a new live range for each block with multiple uses.
      3. Spill.
      
      Steps 2 and 3 are similar to what the standard spiller is doing.
      
      llvm-svn: 123853
      9fb04015
  5. Jan 18, 2011
  6. Jan 04, 2011
  7. Dec 22, 2010
  8. Dec 21, 2010
    • Jakob Stoklund Olesen's avatar
      Add EdgeBundles to SplitKit. · 2530cd2a
      Jakob Stoklund Olesen authored
      Edge bundles is an annotation on the CFG that turns it into a bipartite directed
      graph where each basic block is connected to an outgoing and an ingoing bundle.
      These bundles are useful for identifying regions of the CFG for live range
      splitting.
      
      llvm-svn: 122301
      2530cd2a
  9. Dec 18, 2010
  10. Dec 15, 2010
  11. Nov 11, 2010
  12. Nov 10, 2010
    • Jakob Stoklund Olesen's avatar
      Basic rematerialization during splitting. · 6ee7d9aa
      Jakob Stoklund Olesen authored
      Whenever splitting wants to insert a copy, it checks if the value can be
      rematerialized cheaply instead.
      
      Missing features:
      - Delete instructions when all uses have been rematerialized.
      - Truncate live ranges to the remaining uses after rematerialization.
      
      llvm-svn: 118702
      6ee7d9aa
  13. Nov 03, 2010
  14. Nov 02, 2010
  15. Nov 01, 2010
  16. Oct 30, 2010
  17. Oct 29, 2010
  18. Oct 28, 2010
  19. Oct 27, 2010
  20. Oct 23, 2010
    • Jakob Stoklund Olesen's avatar
      Be more strict about detecting multi-use blocks for isolation. · 4cf8fe31
      Jakob Stoklund Olesen authored
      When a block has exactly two uses and the register is both live-in and live-out,
      don't isolate the block. We would be inserting two copies, so we haven't really
      made any progress.
      
      If the live-in and live-out values separate into disconnected components after
      splitting, we would be making progress. We can't detect that for now.
      
      llvm-svn: 117169
      4cf8fe31
  21. Oct 22, 2010
  22. Oct 21, 2010
  23. Oct 15, 2010
  24. Oct 14, 2010
  25. Oct 09, 2010
  26. Oct 08, 2010
    • Jakob Stoklund Olesen's avatar
      After splitting, the remaining LiveInterval may be fragmented into multiple · 0f1677e1
      Jakob Stoklund Olesen authored
      connected components. These components should be allocated different virtual
      registers because there is no reason for them to be allocated together.
      
      Add the ConnectedVNInfoEqClasses class to calculate the connected components,
      and move values to new LiveIntervals.
      
      Use it from SplitKit::rewrite by creating new virtual registers for the
      components.
      
      llvm-svn: 116006
      0f1677e1
Loading