diff --git a/lib/CodeGen/PreAllocSplitting.cpp b/lib/CodeGen/PreAllocSplitting.cpp
index 44819aa..4dc8b82 100644
--- a/lib/CodeGen/PreAllocSplitting.cpp
+++ b/lib/CodeGen/PreAllocSplitting.cpp
@@ -277,7 +277,7 @@
     MII = ++MII;
     // FIXME: Limit the number of instructions to examine to reduce
     // compile time?
-    while (MII != MBB->end()) {
+    while (MII != MBB->getFirstTerminator()) {
       unsigned Index = LIs->getInstructionIndex(MII);
       if (Index > LastIdx)
         break;
@@ -486,7 +486,8 @@
            IncomingVNs.begin(), E = IncomingVNs.end(); I != E; ++I) {
         I->second->hasPHIKill = true;
         unsigned KillIndex = LIs->getMBBEndIdx(I->first);
-        LI->addKill(I->second, KillIndex);
+        if (!LiveInterval::isKill(I->second, KillIndex))
+          LI->addKill(I->second, KillIndex);
       }
       
       unsigned EndIndex = 0;
@@ -1118,6 +1119,7 @@
         LIs->RemoveMachineInstrFromMaps(DefMI);
         (*LI)->removeValNo(CurrVN);
         DefMI->eraseFromParent();
+        VNUseCount.erase(CurrVN);
         NumDeadSpills++;
         changed = true;
         continue;
@@ -1176,11 +1178,15 @@
              VNUseCount[CurrVN].begin(), IE = VNUseCount[CurrVN].end();
              II != IE; ++II) {
           for (DenseMap<VNInfo*, SmallPtrSet<MachineInstr*, 4> >::iterator
-               VI = VNUseCount.begin(), VE = VNUseCount.end(); VI != VE; ++VI)
-            VI->second.erase(*II);
+               VNI = VNUseCount.begin(), VNE = VNUseCount.end(); VNI != VNE; 
+               ++VNI)
+            if (VNI->first != CurrVN)
+              VNI->second.erase(*II);
           LIs->RemoveMachineInstrFromMaps(*II);
           (*II)->eraseFromParent();
         }
+        
+        VNUseCount.erase(CurrVN);
 
         for (DenseMap<VNInfo*, SmallPtrSet<MachineInstr*, 4> >::iterator
              VI = VNUseCount.begin(), VE = VNUseCount.end(); VI != VE; ++VI)
@@ -1204,6 +1210,8 @@
         (*UI)->eraseFromParent();
       }
         
+      VNUseCount.erase(CurrVN);
+        
       LIs->RemoveMachineInstrFromMaps(DefMI);
       (*LI)->removeValNo(CurrVN);
       DefMI->eraseFromParent();
