mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-15 21:24:00 +00:00
Reapply r128045 and r128051 with fixes.
This will extend the ranges of debug info variables in registers until they are clobbered. Fix 1: Don't mistake DBG_VALUE instructions referring to incoming arguments on the stack with DBG_VALUE instructions referring to variables in the frame pointer. This fixes the gdb test-suite failure. Fix 2: Don't trace through copies to physical registers setting up call arguments. These registers are call clobbered, and the source register is more likely to be a callee-saved register that can be extended through the call instruction. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@128114 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -101,10 +101,6 @@ class UserValue {
|
||||
void insertDebugValue(MachineBasicBlock *MBB, SlotIndex Idx, unsigned LocNo,
|
||||
LiveIntervals &LIS, const TargetInstrInfo &TII);
|
||||
|
||||
/// insertDebugKill - Insert an undef DBG_VALUE into MBB at Idx.
|
||||
void insertDebugKill(MachineBasicBlock *MBB, SlotIndex Idx,
|
||||
LiveIntervals &LIS, const TargetInstrInfo &TII);
|
||||
|
||||
public:
|
||||
/// UserValue - Create a new UserValue.
|
||||
UserValue(const MDNode *var, unsigned o, DebugLoc L,
|
||||
@ -515,6 +511,13 @@ UserValue::addDefsFromCopies(LiveInterval *LI, unsigned LocNo,
|
||||
MachineInstr *MI = &*UI;
|
||||
unsigned DstReg = MI->getOperand(0).getReg();
|
||||
|
||||
// Don't follow copies to physregs. These are usually setting up call
|
||||
// arguments, and the argument registers are always call clobbered. We are
|
||||
// better off in the source register which could be a callee-saved register,
|
||||
// or it could be spilled.
|
||||
if (!TargetRegisterInfo::isVirtualRegister(DstReg))
|
||||
continue;
|
||||
|
||||
// Is LocNo extended to reach this copy? If not, another def may be blocking
|
||||
// it, or we are looking at a wrong value of LI.
|
||||
SlotIndex Idx = LIS.getInstructionIndex(MI);
|
||||
@ -752,13 +755,6 @@ void UserValue::insertDebugValue(MachineBasicBlock *MBB, SlotIndex Idx,
|
||||
.addOperand(Loc).addImm(offset).addMetadata(variable);
|
||||
}
|
||||
|
||||
void UserValue::insertDebugKill(MachineBasicBlock *MBB, SlotIndex Idx,
|
||||
LiveIntervals &LIS, const TargetInstrInfo &TII) {
|
||||
MachineBasicBlock::iterator I = findInsertLocation(MBB, Idx, LIS);
|
||||
BuildMI(*MBB, I, findDebugLoc(), TII.get(TargetOpcode::DBG_VALUE)).addReg(0)
|
||||
.addImm(offset).addMetadata(variable);
|
||||
}
|
||||
|
||||
void UserValue::emitDebugValues(VirtRegMap *VRM, LiveIntervals &LIS,
|
||||
const TargetInstrInfo &TII) {
|
||||
MachineFunction::iterator MFEnd = VRM->getMachineFunction().end();
|
||||
@ -790,12 +786,6 @@ void UserValue::emitDebugValues(VirtRegMap *VRM, LiveIntervals &LIS,
|
||||
break;
|
||||
|
||||
++I;
|
||||
if (Stop == MBBEnd)
|
||||
continue;
|
||||
// The current interval ends before MBB.
|
||||
// Insert a kill if there is a gap.
|
||||
if (!I.valid() || I.start() > Stop)
|
||||
insertDebugKill(MBB, Stop, LIS, TII);
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user