While emitting DBG_VALUE for registers spilled at the end of a block do not use locat...
authorDevang Patel <dpatel@apple.com>
Fri, 6 Aug 2010 00:26:18 +0000 (00:26 +0000)
committerDevang Patel <dpatel@apple.com>
Fri, 6 Aug 2010 00:26:18 +0000 (00:26 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110411 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/RegAllocFast.cpp

index 9567308aa73d255329dfb64358966ffa039d3e10..9dff74b5dd99ef91fe2ef528c7f0f95d84a4779f 100644 (file)
@@ -277,7 +277,14 @@ void RAFast::spillVirtReg(MachineBasicBlock::iterator MI,
       int64_t Offset = 0;
       if (DBG->getOperand(1).isImm())
         Offset = DBG->getOperand(1).getImm();
-      DebugLoc DL = MI->getDebugLoc();
+      DebugLoc DL;
+      if (MI == MBB->end()) {
+        // If MI is at basic block end then use last instruction's location.
+        MachineBasicBlock::iterator EI = MI;
+        DL = (--EI)->getDebugLoc();
+      }
+      else
+        DL = MI->getDebugLoc();
       if (MachineInstr *NewDV = 
           TII->emitFrameIndexDebugValue(*MF, FI, Offset, MDPtr, DL)) {
         MachineBasicBlock *MBB = DBG->getParent();