LiveDebugValues: Assume calls never clobber SP.
A call should never modify the stack pointer, but some backends are not so sure about this and never list SP in the regmask. For the purposes of LiveDebugValues we assume a call never clobbers SP. We already have a similar workaround in DbgValueHistoryCalculator (which we hopefully can retire soon). This fixes the availabilty of local ASANified variables on AArch64. rdar://problem/27757381 llvm-svn: 296847
This commit is contained in:
@@ -373,8 +373,12 @@ void LiveDebugValues::transferRegisterDef(MachineInstr &MI,
|
||||
unsigned SP = TLI->getStackPointerRegisterToSaveRestore();
|
||||
SparseBitVector<> KillSet;
|
||||
for (const MachineOperand &MO : MI.operands()) {
|
||||
// Determine whether the operand is a register def. Assume that call
|
||||
// instructions never clobber SP, because some backends (e.g., AArch64)
|
||||
// never list SP in the regmask.
|
||||
if (MO.isReg() && MO.isDef() && MO.getReg() &&
|
||||
TRI->isPhysicalRegister(MO.getReg())) {
|
||||
TRI->isPhysicalRegister(MO.getReg()) &&
|
||||
!(MI.isCall() && MO.getReg() == SP)) {
|
||||
// Remove ranges of all aliased registers.
|
||||
for (MCRegAliasIterator RAI(MO.getReg(), TRI, true); RAI.isValid(); ++RAI)
|
||||
for (unsigned ID : OpenRanges.getVarLocs())
|
||||
|
||||
Reference in New Issue
Block a user