Re-enable 102323 with fix: do not update dbg_value's with incorrect frame indices...
authorEvan Cheng <evan.cheng@apple.com>
Mon, 26 Apr 2010 18:37:21 +0000 (18:37 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Mon, 26 Apr 2010 18:37:21 +0000 (18:37 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@102361 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/LiveIntervalAnalysis.cpp

index 3e3741746543cce3df8f1abe3de9dcfd03313106..bd8a54cc22cae0b2792d66cb527634c516c2b9a8 100644 (file)
@@ -1296,28 +1296,25 @@ rewriteInstructionsForSpills(const LiveInterval &li, bool TrySplit,
     MachineOperand &O = ri.getOperand();
     ++ri;
     if (MI->isDebugValue()) {
-#if 0
-      // Disabled temporarily.
       // Modify DBG_VALUE now that the value is in a spill slot.
-      uint64_t Offset = MI->getOperand(1).getImm();
-      const MDNode *MDPtr = MI->getOperand(2).getMetadata();
-      DebugLoc DL = MI->getDebugLoc();
-      MachineInstr *NewDV = tii_->emitFrameIndexDebugValue(*mf_, Slot, Offset,
-                                                           MDPtr, DL);
-      if (NewDV) {
-        DEBUG(dbgs() << "Modifying debug info due to spill:" << "\t" << *MI);
-        ReplaceMachineInstrInMaps(MI, NewDV);
-        MachineBasicBlock *MBB = MI->getParent();
-        MBB->insert(MBB->erase(MI), NewDV);
-      } else {
-#endif
-        DEBUG(dbgs() << "Removing debug info due to spill:" << "\t" << *MI);
-        RemoveMachineInstrFromMaps(MI);
-        vrm.RemoveMachineInstrFromMaps(MI);
-        MI->eraseFromParent();
-#if 0
+      if (Slot == VirtRegMap::NO_STACK_SLOT) {
+        uint64_t Offset = MI->getOperand(1).getImm();
+        const MDNode *MDPtr = MI->getOperand(2).getMetadata();
+        DebugLoc DL = MI->getDebugLoc();
+        if (MachineInstr *NewDV = tii_->emitFrameIndexDebugValue(*mf_, Slot,
+                                                           Offset, MDPtr, DL)) {
+          DEBUG(dbgs() << "Modifying debug info due to spill:" << "\t" << *MI);
+          ReplaceMachineInstrInMaps(MI, NewDV);
+          MachineBasicBlock *MBB = MI->getParent();
+          MBB->insert(MBB->erase(MI), NewDV);
+          continue;
+        }
       }
-#endif
+
+      DEBUG(dbgs() << "Removing debug info due to spill:" << "\t" << *MI);
+      RemoveMachineInstrFromMaps(MI);
+      vrm.RemoveMachineInstrFromMaps(MI);
+      MI->eraseFromParent();
       continue;
     }
     assert(!O.isImplicit() && "Spilling register that's used as implicit use?");