Make LiveRangeQuery work for PHIDefs as well.
authorJakob Stoklund Olesen <stoklund@2pi.dk>
Sat, 15 Sep 2012 16:29:49 +0000 (16:29 +0000)
committerJakob Stoklund Olesen <stoklund@2pi.dk>
Sat, 15 Sep 2012 16:29:49 +0000 (16:29 +0000)
If a PHI value happens to be live out from the layout predecessor of its
def block, the def slot index will be in the middle of the segment:

%vreg11 = [192r,240B:0)[352r,416B:2)[416B,496r:1)  0@192r 1@480B-phi %2@352r

A LiveRangeQuery for 480 should return NULL from valueIn() since the
PHI value is defined at the block entry, not live in to the block.

No test case, future code depends on this functionality.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@163971 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/CodeGen/LiveInterval.h

index d7b8f44e07b63ac13ae31bf25292294be9821a80..3bce496b2b58560dd4dc3dc23bfe8c293d65dc83 100644 (file)
@@ -508,6 +508,12 @@ namespace llvm {
           if (++I == E)
             return;
         }
+        // Special case: A PHIDef value can have its def in the middle of a
+        // segment if the value happens to be live out of the layout
+        // predecessor.
+        // Such a value is not live-in.
+        if (EarlyVal->def == Idx.getBaseIndex())
+          EarlyVal = 0;
       }
       // I now points to the segment that may be live-through, or defined by
       // this instr. Ignore segments starting after the current instr.