Speculatively revert r123032.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123039 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Devang Patel 2011-01-07 22:33:41 +00:00
parent 6a6623c596
commit 51a666f0e5
5 changed files with 25 additions and 7 deletions

View File

@ -2257,6 +2257,15 @@ DwarfDebug::collectVariableInfoFromMMITable(const MachineFunction * MF,
} }
} }
/// isDbgValueInUndefinedReg - Return true if debug value, encoded by
/// DBG_VALUE instruction, is in undefined reg.
static bool isDbgValueInUndefinedReg(const MachineInstr *MI) {
assert (MI->isDebugValue() && "Invalid DBG_VALUE machine instruction!");
if (MI->getOperand(0).isReg() && !MI->getOperand(0).getReg())
return true;
return false;
}
/// isDbgValueInDefinedReg - Return true if debug value, encoded by /// isDbgValueInDefinedReg - Return true if debug value, encoded by
/// DBG_VALUE instruction, is in a defined reg. /// DBG_VALUE instruction, is in a defined reg.
static bool isDbgValueInDefinedReg(const MachineInstr *MI) { static bool isDbgValueInDefinedReg(const MachineInstr *MI) {
@ -2281,7 +2290,7 @@ DwarfDebug::collectVariableInfo(const MachineFunction *MF,
for (MachineBasicBlock::const_iterator II = I->begin(), IE = I->end(); for (MachineBasicBlock::const_iterator II = I->begin(), IE = I->end();
II != IE; ++II) { II != IE; ++II) {
const MachineInstr *MInsn = II; const MachineInstr *MInsn = II;
if (!MInsn->isDebugValue()) if (!MInsn->isDebugValue() || isDbgValueInUndefinedReg(MInsn))
continue; continue;
DbgValues.push_back(MInsn); DbgValues.push_back(MInsn);
} }
@ -2303,18 +2312,19 @@ DwarfDebug::collectVariableInfo(const MachineFunction *MF,
ME = DbgValues.end(); MI != ME; ++MI) { ME = DbgValues.end(); MI != ME; ++MI) {
const MDNode *Var = const MDNode *Var =
(*MI)->getOperand((*MI)->getNumOperands()-1).getMetadata(); (*MI)->getOperand((*MI)->getNumOperands()-1).getMetadata();
if (Var == DV && if (Var == DV && isDbgValueInDefinedReg(*MI) &&
!PrevMI->isIdenticalTo(*MI)) !PrevMI->isIdenticalTo(*MI))
MultipleValues.push_back(*MI); MultipleValues.push_back(*MI);
PrevMI = *MI; PrevMI = *MI;
} }
DbgScope *Scope = NULL; DbgScope *Scope = findDbgScope(MInsn);
bool CurFnArg = false;
if (DV.getTag() == dwarf::DW_TAG_arg_variable && if (DV.getTag() == dwarf::DW_TAG_arg_variable &&
DISubprogram(DV.getContext()).describes(MF->getFunction())) DISubprogram(DV.getContext()).describes(MF->getFunction()))
CurFnArg = true;
if (!Scope && CurFnArg)
Scope = CurrentFnDbgScope; Scope = CurrentFnDbgScope;
else
Scope = findDbgScope(MInsn);
// If variable scope is not found then skip this variable. // If variable scope is not found then skip this variable.
if (!Scope) if (!Scope)
continue; continue;

View File

@ -39,6 +39,10 @@
using namespace llvm; using namespace llvm;
static cl::opt<bool>
EnableLDV("live-debug-variables",
cl::desc("Enable the live debug variables pass"), cl::Hidden);
char LiveDebugVariables::ID = 0; char LiveDebugVariables::ID = 0;
INITIALIZE_PASS_BEGIN(LiveDebugVariables, "livedebugvars", INITIALIZE_PASS_BEGIN(LiveDebugVariables, "livedebugvars",
@ -618,6 +622,8 @@ bool LDVImpl::runOnMachineFunction(MachineFunction &mf) {
} }
bool LiveDebugVariables::runOnMachineFunction(MachineFunction &mf) { bool LiveDebugVariables::runOnMachineFunction(MachineFunction &mf) {
if (!EnableLDV)
return false;
if (!pImpl) if (!pImpl)
pImpl = new LDVImpl(this); pImpl = new LDVImpl(this);
return static_cast<LDVImpl*>(pImpl)->runOnMachineFunction(mf); return static_cast<LDVImpl*>(pImpl)->runOnMachineFunction(mf);

View File

@ -61,6 +61,6 @@ declare void @llvm.dbg.value(metadata, i64, metadata) nounwind readnone
; CHECK-NEXT: .short 1 ; CHECK-NEXT: .short 1
; CHECK-NEXT: .byte 85 ; CHECK-NEXT: .byte 85
; CHECK-NEXT: .quad Ltmp3 ; CHECK-NEXT: .quad Ltmp3
; CHECK-NEXT: .quad Ltmp6 ; CHECK-NEXT: .quad Lfunc_end
; CHECK-NEXT: .short 1 ; CHECK-NEXT: .short 1
; CHECK-NEXT: .byte 83 ; CHECK-NEXT: .byte 83

View File

@ -39,5 +39,6 @@ entry:
!13 = metadata !{i32 7, i32 0, metadata !14, null} !13 = metadata !{i32 7, i32 0, metadata !14, null}
!14 = metadata !{i32 524299, metadata !8, i32 6, i32 0} ; [ DW_TAG_lexical_block ] !14 = metadata !{i32 524299, metadata !8, i32 6, i32 0} ; [ DW_TAG_lexical_block ]
;CHECK:Ltmp8 ;CHECK: DEBUG_VALUE: bar:x <- EBX+0
;CHECK-NEXT:Ltmp
;CHECK-NEXT: DEBUG_VALUE: foo:y <- 1+0 ;CHECK-NEXT: DEBUG_VALUE: foo:y <- 1+0

View File

@ -1,4 +1,5 @@
; RUN: llc -mtriple=x86_64-apple-darwin < %s | FileCheck %s ; RUN: llc -mtriple=x86_64-apple-darwin < %s | FileCheck %s
; XFAIL: *
%struct.a = type { i32 } %struct.a = type { i32 }