Skip to content
  1. Mar 02, 2011
  2. Feb 22, 2011
  3. Feb 19, 2011
  4. Feb 17, 2011
    • Jakob Stoklund Olesen's avatar
      Split local live ranges. · 93c8736a
      Jakob Stoklund Olesen authored
      A local live range is live in a single basic block. If such a range fails to
      allocate, try to find a sub-range that would get a larger spill weight than its
      interference.
      
      llvm-svn: 125764
      93c8736a
  5. Feb 10, 2011
  6. Feb 09, 2011
  7. Feb 08, 2011
    • Jakob Stoklund Olesen's avatar
      Add SplitEditor::overlapIntv() to create small ranges where both registers are live. · 17499351
      Jakob Stoklund Olesen authored
      If a live range is used by a terminator instruction, and that live range needs
      to leave the block on the stack or in a different register, it can be necessary
      to have both sides of the split live at the terminator instruction.
      
      Example:
      
        %vreg2 = COPY %vreg1
        JMP %vreg1
      
      Becomes after spilling %vreg2:
      
        SPILL %vreg1
        JMP %vreg1
      
      The spill doesn't kill the register as is normally the case.
      
      llvm-svn: 125102
      17499351
  8. Feb 03, 2011
  9. Jan 26, 2011
  10. Jan 20, 2011
  11. Jan 18, 2011
  12. Jan 04, 2011
  13. 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
  14. Dec 15, 2010
  15. 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
  16. Nov 02, 2010
  17. Oct 28, 2010
  18. Oct 27, 2010
  19. 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
  20. Oct 22, 2010
  21. Oct 15, 2010
  22. Oct 09, 2010
  23. Oct 06, 2010
  24. Oct 05, 2010
  25. Sep 22, 2010
    • Jakob Stoklund Olesen's avatar
      Build the complement interval dupli after the split intervals instead of · 6f8bd42e
      Jakob Stoklund Olesen authored
      creating it before and subtracting split ranges.
      
      This way, the SSA update code in LiveIntervalMap can properly create and use new
      phi values in dupli. Now it is possible to create split regions where a value
      escapes along two different CFG edges, creating phi values outside the split
      region.
      
      This is a work in progress and probably quite broken.
      
      llvm-svn: 114492
      6f8bd42e
  26. Sep 16, 2010
    • Jakob Stoklund Olesen's avatar
      Use the value mapping provided by LiveIntervalMap. This simplifies the code a · 9855109b
      Jakob Stoklund Olesen authored
      great deal because we don't have to worry about maintaining SSA form.
      
      Unconditionally copy back to dupli when the register is live out of the split
      range, even if the live-out value was defined outside the range. Skipping the
      back-copy only makes sense when the live range is going to spill outside the
      split range, and we don't know that it will. Besides, this was a hack to avoid
      SSA update issues.
      
      Clear up some confusion about the end point of a half-open LiveRange. Methinks
      LiveRanges need to be closed so both start and end are included in the range.
      The low bits of a SlotIndex are symbolic, so a half-open range doesn't really
      make sense. This would be a pervasive change, though.
      
      llvm-svn: 114043
      9855109b
Loading