Fix for PR1279. Dead def has a live interval of length 1. Copy coalescing should
authorEvan Cheng <evan.cheng@apple.com>
Wed, 28 Mar 2007 01:30:37 +0000 (01:30 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Wed, 28 Mar 2007 01:30:37 +0000 (01:30 +0000)
not violate that.

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

lib/CodeGen/LiveIntervalAnalysis.cpp

index 38ada30ad74d9ededd54dee461c7fe3c283523ab..eb3ac31998ac2aedee2e5b22063800b14c4b069a 100644 (file)
@@ -935,9 +935,9 @@ bool LiveIntervals::JoinCopy(MachineInstr *CopyMI,
     // The instruction which defines the src is only truly dead if there are
     // no intermediate uses and there isn't a use beyond the copy.
     // FIXME: find the last use, mark is kill and shorten the live range.
-    if (SrcEnd > getDefIndex(CopyIdx))
+    if (SrcEnd > getDefIndex(CopyIdx)) {
       isDead = false;
-    else {
+    else {
       MachineOperand *MOU;
       MachineInstr *LastUse= lastRegisterUse(repSrcReg, SrcStart, CopyIdx, MOU);
       if (LastUse) {
@@ -947,7 +947,9 @@ bool LiveIntervals::JoinCopy(MachineInstr *CopyMI,
         isShorten = true;
         RemoveStart = getDefIndex(getInstructionIndex(LastUse));
         RemoveEnd   = SrcEnd;
-      }
+      } else if (RemoveStart > 0)
+        // A dead def should have a single cycle interval.
+        ++RemoveStart;
     }
   }