Add an optional parameter with a list of undefs to extendToIndices
authorKrzysztof Parzyszek <kparzysz@codeaurora.org>
Wed, 31 Aug 2016 18:02:19 +0000 (18:02 +0000)
committerKrzysztof Parzyszek <kparzysz@codeaurora.org>
Wed, 31 Aug 2016 18:02:19 +0000 (18:02 +0000)
llvm-svn: 280268

llvm/include/llvm/CodeGen/LiveIntervalAnalysis.h
llvm/lib/CodeGen/LiveIntervalAnalysis.cpp

index d65c655..b3f6fd5 100644 (file)
@@ -164,14 +164,19 @@ extern cl::opt<bool> UseSegmentSetForPhysRegs;
     void shrinkToUses(LiveInterval::SubRange &SR, unsigned Reg);
 
     /// Extend the live range @p LR to reach all points in @p Indices. The
-    /// points in the @p Indices array must be jointly dominated by existing
-    /// defs in @p LR. PHI-defs are added as needed to maintain SSA form.
+    /// points in the @p Indices array must be jointly dominated by the union
+    /// of the existing defs in @p LR and points in @p Undefs.
+    ///
+    /// PHI-defs are added as needed to maintain SSA form.
     ///
     /// If a SlotIndex in @p Indices is the end index of a basic block, @p LR
     /// will be extended to be live out of the basic block.
+    /// If a SlotIndex in @p Indices is jointy dominated only by points in
+    /// @p Undefs, the live range will not be extended to that point.
     ///
     /// See also LiveRangeCalc::extend().
-    void extendToIndices(LiveRange &LR, ArrayRef<SlotIndex> Indices);
+    void extendToIndices(LiveRange &LR, ArrayRef<SlotIndex> Indices,
+                         ArrayRef<SlotIndex> Undefs = {});
 
     /// If @p LR has a live value at @p Kill, prune its live range by removing
     /// any liveness reachable from Kill. Add live range end points to
index ba34d76..a312276 100644 (file)
@@ -568,11 +568,12 @@ void LiveIntervals::shrinkToUses(LiveInterval::SubRange &SR, unsigned Reg) {
 }
 
 void LiveIntervals::extendToIndices(LiveRange &LR,
-                                    ArrayRef<SlotIndex> Indices) {
+                                    ArrayRef<SlotIndex> Indices,
+                                    ArrayRef<SlotIndex> Undefs) {
   assert(LRCalc && "LRCalc not initialized.");
   LRCalc->reset(MF, getSlotIndexes(), DomTree, &getVNInfoAllocator());
   for (unsigned i = 0, e = Indices.size(); i != e; ++i)
-    LRCalc->extend(LR, Indices[i], /*PhysReg=*/0, /*Undefs=*/{});
+    LRCalc->extend(LR, Indices[i], /*PhysReg=*/0, Undefs);
 }
 
 void LiveIntervals::pruneValue(LiveRange &LR, SlotIndex Kill,