- Really preserve dbg_value instructions when the register is spilled.
authorEvan Cheng <evan.cheng@apple.com>
Wed, 28 Apr 2010 23:52:26 +0000 (23:52 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Wed, 28 Apr 2010 23:52:26 +0000 (23:52 +0000)
- Also, update dbg_value is the value is being re-matted from a frame slot, e.g. fixed slots for arguments.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@102565 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/LiveIntervalAnalysis.cpp

index bd8a54cc22cae0b2792d66cb527634c516c2b9a8..7a2feeacabc26e35ac8829d6570926f91cae3080 100644 (file)
@@ -1297,11 +1297,12 @@ rewriteInstructionsForSpills(const LiveInterval &li, bool TrySplit,
     ++ri;
     if (MI->isDebugValue()) {
       // Modify DBG_VALUE now that the value is in a spill slot.
-      if (Slot == VirtRegMap::NO_STACK_SLOT) {
+      if (Slot != VirtRegMap::MAX_STACK_SLOT || isLoadSS) {
         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,
+        int FI = isLoadSS ? LdSlot : (int)Slot;
+        if (MachineInstr *NewDV = tii_->emitFrameIndexDebugValue(*mf_, FI,
                                                            Offset, MDPtr, DL)) {
           DEBUG(dbgs() << "Modifying debug info due to spill:" << "\t" << *MI);
           ReplaceMachineInstrInMaps(MI, NewDV);