From f019cd62da1834c166324a28b1a8d69e4cb47e87 Mon Sep 17 00:00:00 2001 From: Manman Ren Date: Wed, 13 Feb 2013 01:14:49 +0000 Subject: 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 llvm-svn: 175023 --- llvm/lib/CodeGen/LiveDebugVariables.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'llvm/lib/CodeGen/LiveDebugVariables.cpp') diff --git a/llvm/lib/CodeGen/LiveDebugVariables.cpp b/llvm/lib/CodeGen/LiveDebugVariables.cpp index 786f3534a11..3e31051dbc3 100644 --- a/llvm/lib/CodeGen/LiveDebugVariables.cpp +++ b/llvm/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(pImpl)->runOnMachineFunction(mf); + ModifiedMF = static_cast(pImpl)->runOnMachineFunction(mf); + return ModifiedMF; } void LiveDebugVariables::releaseMemory() { - if (pImpl) + if (pImpl) { static_cast(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(pImpl)->emitDebugValues(VRM); + EmitDone = true; + } } -- cgit v1.2.3