Skip to content
  1. Oct 27, 2010
  2. 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
  3. Oct 22, 2010
  4. Oct 21, 2010
  5. Oct 15, 2010
  6. Oct 14, 2010
  7. Oct 09, 2010
  8. 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
  9. Oct 07, 2010
  10. Oct 06, 2010
  11. Oct 05, 2010
  12. Sep 25, 2010
  13. 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
  14. 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
  15. Sep 14, 2010
  16. Sep 13, 2010
  17. Aug 19, 2010
    • Michael J. Spencer's avatar
      Fix the msvc 2010 build. · abca1734
      Michael J. Spencer authored
      The Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.30319.01
      implements parts of C++0x based on the draft standard. An old version of
      the draft had a bug that makes std::pair<T1*, T2*>(something, 0) fail to
      compile. This is because the template<class U, class V> pair(U&& x, V&& y)
      constructor is selected, even though it later fails to implicitly convert
      U and V to frist_type and second_type.
      
      This has been fixed in n3090, but it seems that Microsoft is not going to
      update msvc.
      
      llvm-svn: 111535
      abca1734
  18. Aug 18, 2010
  19. Aug 14, 2010
    • Jakob Stoklund Olesen's avatar
      Clean up the Spiller.h interface. · 27e1f265
      Jakob Stoklund Olesen authored
      The earliestStart argument is entirely specific to linear scan allocation, and
      can be easily calculated by RegAllocLinearScan.
      
      Replace std::vector with SmallVector.
      
      llvm-svn: 111055
      27e1f265
  20. Aug 13, 2010
    • Jakob Stoklund Olesen's avatar
      Implement splitting inside a single block. · d1191ee4
      Jakob Stoklund Olesen authored
      When a live range is contained a single block, we can split it around
      instruction clusters. The current approach is very primitive, splitting before
      and after the largest gap between uses.
      
      llvm-svn: 111043
      d1191ee4
    • Jakob Stoklund Olesen's avatar
      Let LiveInterval::addRange extend existing ranges, it will verify that value · 3d1027e7
      Jakob Stoklund Olesen authored
      numbers match. The old check could accidentally leave holes in openli.
      
      Also let useIntv add all ranges for the phi-def value inserted by
      enterIntvAtEnd. This works as long at the value mapping is established in
      enterIntvAtEnd.
      
      llvm-svn: 110995
      3d1027e7
    • Jakob Stoklund Olesen's avatar
      Remember to actually update SplitAnalysis statistics now that we have a fancy · 840b81a1
      Jakob Stoklund Olesen authored
      function to do it.
      
      llvm-svn: 110994
      840b81a1
    • Jakob Stoklund Olesen's avatar
      Handle an empty dupli. · 991e4ee8
      Jakob Stoklund Olesen authored
      This can happen if the original interval has been broken into two disconnected
      parts. Ideally, we should be able to detect when the graph is disconnected and
      create separate intervals, but that code is not implemented yet.
      
      Example:
      
      Two basic blocks are both branching to a loop header. Our interval is defined in
      both basic blocks, and live into the loop along both edges.
      
      We decide to split the interval around the loop. The interval is split into an
      inside part and an outside part. The outside part now has two disconnected
      segments, one in each basic block.
      
      If we later decide to split the outside interval into single blocks, we get one
      interval per basic block and an empty dupli for the remainder.
      
      llvm-svn: 110976
      991e4ee8
Loading