diff options
author | Adrian Prantl <aprantl@apple.com> | 2017-06-01 21:14:58 +0000 |
---|---|---|
committer | Adrian Prantl <aprantl@apple.com> | 2017-06-01 21:14:58 +0000 |
commit | d9cd4d52e378fe5cd0971667128da58e66510f24 (patch) | |
tree | 52255cc7a8e6a1c4e93812bd24469590f392d548 /llvm/lib/CodeGen | |
parent | 41d4b4e588e514d6b0df249970e63e61fe28ead0 (diff) | |
download | bcm5719-llvm-d9cd4d52e378fe5cd0971667128da58e66510f24.tar.gz bcm5719-llvm-d9cd4d52e378fe5cd0971667128da58e66510f24.zip |
DbgValueHistoryCalculator: Ignore call instructions that claim to clobber SP.
The AArch64 backend marks calls that involve aggregate function
arguments as having an implicit def of SP. We already have the same
workaround in LiveDebugValues and in DbgValueHistoryCalculator for SP
clobbers in register masks. This adds register defs to the list.
Fixes rdar://problem/30361929 and Swift SR-3851.
llvm-svn: 304471
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DbgValueHistoryCalculator.cpp | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/DbgValueHistoryCalculator.cpp b/llvm/lib/CodeGen/AsmPrinter/DbgValueHistoryCalculator.cpp index 20e1467b30c..c2ad9db81cf 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DbgValueHistoryCalculator.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DbgValueHistoryCalculator.cpp @@ -194,6 +194,10 @@ void llvm::calculateDbgValueHistory(const MachineFunction *MF, // some variables. for (const MachineOperand &MO : MI.operands()) { if (MO.isReg() && MO.isDef() && MO.getReg()) { + // Ignore call instructions that claim to clobber SP. The AArch64 + // backend does this for aggregate function arguments. + if (MI.isCall() && MO.getReg() == SP) + continue; // If this is a virtual register, only clobber it since it doesn't // have aliases. if (TRI->isVirtualRegister(MO.getReg())) |