summaryrefslogtreecommitdiff
path: root/lib/CodeGen/LiveDebugVariables.cpp
diff options
context:
space:
mode:
authorManman Ren <mren@apple.com>2013-02-13 01:14:49 +0000
committerManman Ren <mren@apple.com>2013-02-13 01:14:49 +0000
commit4be3853fd0a0e3b37a27afe05327e638e680c463 (patch)
treef98361710e65786e1efb1b9cb30fa1b5a0c762af /lib/CodeGen/LiveDebugVariables.cpp
parentb1953981926991bb1373c915952368c653138e71 (diff)
downloadllvm-4be3853fd0a0e3b37a27afe05327e638e680c463.tar.gz
llvm-4be3853fd0a0e3b37a27afe05327e638e680c463.tar.bz2
llvm-4be3853fd0a0e3b37a27afe05327e638e680c463.tar.xz
Debug Info: LiveDebugVarible can remove DBG_VALUEs, make sure we emit them back.
RegisterCoalescer used to depend on LiveDebugVariable. LDV removes DBG_VALUEs without emitting them at the end. We fix this by removing LDV from RegisterCoalescer. Also add an assertion to make sure we call emitDebugValues if DBG_VALUEs are removed at runOnMachineFunction. rdar://problem/13183203 Reviewed by Andy & Jakob git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@175023 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/LiveDebugVariables.cpp')
-rw-r--r--lib/CodeGen/LiveDebugVariables.cpp16
1 files changed, 12 insertions, 4 deletions
diff --git a/lib/CodeGen/LiveDebugVariables.cpp b/lib/CodeGen/LiveDebugVariables.cpp
index 786f3534a1..3e31051dbc 100644
--- a/lib/CodeGen/LiveDebugVariables.cpp
+++ b/lib/CodeGen/LiveDebugVariables.cpp
@@ -64,7 +64,8 @@ void LiveDebugVariables::getAnalysisUsage(AnalysisUsage &AU) const {
MachineFunctionPass::getAnalysisUsage(AU);
}
-LiveDebugVariables::LiveDebugVariables() : MachineFunctionPass(ID), pImpl(0) {
+LiveDebugVariables::LiveDebugVariables() : MachineFunctionPass(ID), pImpl(0),
+ EmitDone(false), ModifiedMF(false) {
initializeLiveDebugVariablesPass(*PassRegistry::getPassRegistry());
}
@@ -701,12 +702,17 @@ bool LiveDebugVariables::runOnMachineFunction(MachineFunction &mf) {
return false;
if (!pImpl)
pImpl = new LDVImpl(this);
- return static_cast<LDVImpl*>(pImpl)->runOnMachineFunction(mf);
+ ModifiedMF = static_cast<LDVImpl*>(pImpl)->runOnMachineFunction(mf);
+ return ModifiedMF;
}
void LiveDebugVariables::releaseMemory() {
- if (pImpl)
+ if (pImpl) {
static_cast<LDVImpl*>(pImpl)->clear();
+ // Make sure we call emitDebugValues if the machine function was modified.
+ assert((!ModifiedMF || EmitDone) &&
+ "Dbg values are not emitted in LDV");
+ }
}
LiveDebugVariables::~LiveDebugVariables() {
@@ -1014,8 +1020,10 @@ void LDVImpl::emitDebugValues(VirtRegMap *VRM) {
}
void LiveDebugVariables::emitDebugValues(VirtRegMap *VRM) {
- if (pImpl)
+ if (pImpl) {
static_cast<LDVImpl*>(pImpl)->emitDebugValues(VRM);
+ EmitDone = true;
+ }
}