If a livein is not used in the block. It's live through.
authorEvan Cheng <evan.cheng@apple.com>
Wed, 27 Jun 2007 18:47:28 +0000 (18:47 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Wed, 27 Jun 2007 18:47:28 +0000 (18:47 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37764 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/LiveIntervalAnalysis.cpp

index ebab85fb48055ca8dce9a9df4ee9743eb108aa1b..369493ff94e54a591dbe40aeb128408618cc1aab 100644 (file)
@@ -625,13 +625,15 @@ void LiveIntervals::handleLiveInRegister(MachineBasicBlock *MBB,
 exit:
   // Live-in register might not be used at all.
   if (end == MIIdx) {
-    DOUT << " dead";
-    if (isAlias)
+    if (isAlias) {
+      DOUT << " dead";
       end = getDefIndex(MIIdx) + 1;
+    } else {
+      DOUT << " live through";
+      end = baseIndex;
+    }
   }
 
-  assert(start < end && "did not find end of interval?");
-
   LiveRange LR(start, end, interval.getNextValue(~0U, 0));
   DOUT << " +" << LR << '\n';
   interval.addRange(LR);
@@ -662,7 +664,8 @@ void LiveIntervals::computeIntervals() {
         // Multiple live-ins can alias the same register.
         for (const unsigned* AS = mri_->getSubRegisters(*LI); *AS; ++AS)
           if (!hasInterval(*AS))
-            handleLiveInRegister(MBB, MIIndex, getOrCreateInterval(*AS), true);
+            handleLiveInRegister(MBB, MIIndex, getOrCreateInterval(*AS),
+                                 true);
       }
     }