diff --git a/lib/CodeGen/LiveIntervalAnalysis.cpp b/lib/CodeGen/LiveIntervalAnalysis.cpp
index 0955785..9bd0037 100644
--- a/lib/CodeGen/LiveIntervalAnalysis.cpp
+++ b/lib/CodeGen/LiveIntervalAnalysis.cpp
@@ -141,7 +141,7 @@
         unsigned offset = LI->start % InstrSlots::NUM;
         if (offset == InstrSlots::LOAD) {
           std::vector<IdxMBBPair>::const_iterator I =
-                  std::lower_bound(OldI2MBB.begin(), OldI2MBB.end(), index);
+                  std::lower_bound(OldI2MBB.begin(), OldI2MBB.end(), LI->start);
           // Take the pair containing the index
           std::vector<IdxMBBPair>::const_iterator J =
                     ((I != OldI2MBB.end() && I->first > index) ||
@@ -155,11 +155,11 @@
         // Remap the ending index in the same way that we remapped the start,
         // except for the final step where we always map to the immediately
         // following instruction.
-        index = LI->end / InstrSlots::NUM;
+        index = (LI->end - 1) / InstrSlots::NUM;
         offset  = LI->end % InstrSlots::NUM;
-        if (offset == InstrSlots::STORE) {
+        if (offset == InstrSlots::USE) {
           std::vector<IdxMBBPair>::const_iterator I =
-                  std::lower_bound(OldI2MBB.begin(), OldI2MBB.end(), index);
+                  std::lower_bound(OldI2MBB.begin(), OldI2MBB.end(), LI->end);
           // Take the pair containing the index
           std::vector<IdxMBBPair>::const_iterator J =
                     ((I != OldI2MBB.end() && I->first > index) ||
@@ -167,7 +167,9 @@
           
           LI->end = getMBBEndIdx(J->second) + 1;
         } else {
-          LI->end = mi2iMap_[OldI2MI[index]] + offset;
+          unsigned idx = index;
+          while (!OldI2MI[index]) ++index;
+          LI->end = mi2iMap_[OldI2MI[index]] + (idx == index ? offset : 0);
         }
         
         // Remap the VNInfo def index, which works the same as the
@@ -177,7 +179,7 @@
         offset = vni->def % InstrSlots::NUM;
         if (offset == InstrSlots::LOAD) {
           std::vector<IdxMBBPair>::const_iterator I =
-                  std::lower_bound(OldI2MBB.begin(), OldI2MBB.end(), index);
+                  std::lower_bound(OldI2MBB.begin(), OldI2MBB.end(), vni->def);
           // Take the pair containing the index
           std::vector<IdxMBBPair>::const_iterator J =
                     ((I != OldI2MBB.end() && I->first > index) ||
@@ -192,11 +194,11 @@
         // Remap the VNInfo kill indices, which works the same as
         // the end indices above.
         for (size_t i = 0; i < vni->kills.size(); ++i) {
-          index = vni->kills[i] / InstrSlots::NUM;
+          index = (vni->kills[i]-1) / InstrSlots::NUM;
           offset = vni->kills[i] % InstrSlots::NUM;
-          if (OldI2MI[vni->kills[i] / InstrSlots::NUM]) {
+          if (offset == InstrSlots::USE) {
             std::vector<IdxMBBPair>::const_iterator I =
-                    std::lower_bound(OldI2MBB.begin(), OldI2MBB.end(), index);
+             std::lower_bound(OldI2MBB.begin(), OldI2MBB.end(), vni->kills[i]);
             // Take the pair containing the index
             std::vector<IdxMBBPair>::const_iterator J =
                       ((I != OldI2MBB.end() && I->first > index) ||
@@ -204,7 +206,10 @@
 
             vni->kills[i] = getMBBEndIdx(J->second) + 1;
           } else {
-            vni->kills[i] = mi2iMap_[OldI2MI[index]] + offset;
+            unsigned idx = index;
+            while (!OldI2MI[index]) ++index;
+            vni->kills[i] = mi2iMap_[OldI2MI[index]] +
+                            (idx == index ? offset : 0);
           }
         }
       }
