Rename a local variable.

llvm-svn: 130171
This commit is contained in:
Devang Patel 2011-04-25 23:05:21 +00:00
parent 8ce24133fd
commit 2606f4d6d2
1 changed files with 21 additions and 17 deletions

View File

@ -644,7 +644,7 @@ DIE *DwarfDebug::constructVariableDIE(DbgVariable *DV, DbgScope *Scope) {
// Define variable debug information entry. // Define variable debug information entry.
DIE *VariableDie = new DIE(Tag); DIE *VariableDie = new DIE(Tag);
CompileUnit *TheCU = getCompileUnit(DV->getVariable()); CompileUnit *VariableCU = getCompileUnit(DV->getVariable());
DIE *AbsDIE = NULL; DIE *AbsDIE = NULL;
DenseMap<const DbgVariable *, const DbgVariable *>::iterator DenseMap<const DbgVariable *, const DbgVariable *>::iterator
V2AVI = VarToAbstractVarMap.find(DV); V2AVI = VarToAbstractVarMap.find(DV);
@ -652,20 +652,23 @@ DIE *DwarfDebug::constructVariableDIE(DbgVariable *DV, DbgScope *Scope) {
AbsDIE = V2AVI->second->getDIE(); AbsDIE = V2AVI->second->getDIE();
if (AbsDIE) if (AbsDIE)
TheCU->addDIEEntry(VariableDie, dwarf::DW_AT_abstract_origin, VariableCU->addDIEEntry(VariableDie, dwarf::DW_AT_abstract_origin,
dwarf::DW_FORM_ref4, AbsDIE); dwarf::DW_FORM_ref4, AbsDIE);
else { else {
TheCU->addString(VariableDie, dwarf::DW_AT_name, dwarf::DW_FORM_string, Name); VariableCU->addString(VariableDie, dwarf::DW_AT_name, dwarf::DW_FORM_string,
TheCU->addSourceLine(VariableDie, DV->getVariable()); Name);
VariableCU->addSourceLine(VariableDie, DV->getVariable());
// Add variable type. // Add variable type.
TheCU->addType(VariableDie, DV->getType()); VariableCU->addType(VariableDie, DV->getType());
} }
if (Tag == dwarf::DW_TAG_formal_parameter && DV->getType().isArtificial()) if (Tag == dwarf::DW_TAG_formal_parameter && DV->getType().isArtificial())
TheCU->addUInt(VariableDie, dwarf::DW_AT_artificial, dwarf::DW_FORM_flag, 1); VariableCU->addUInt(VariableDie, dwarf::DW_AT_artificial,
dwarf::DW_FORM_flag, 1);
else if (DIVariable(DV->getVariable()).isArtificial()) else if (DIVariable(DV->getVariable()).isArtificial())
TheCU->addUInt(VariableDie, dwarf::DW_AT_artificial, dwarf::DW_FORM_flag, 1); VariableCU->addUInt(VariableDie, dwarf::DW_AT_artificial,
dwarf::DW_FORM_flag, 1);
if (Scope->isAbstractScope()) { if (Scope->isAbstractScope()) {
DV->setDIE(VariableDie); DV->setDIE(VariableDie);
@ -676,7 +679,7 @@ DIE *DwarfDebug::constructVariableDIE(DbgVariable *DV, DbgScope *Scope) {
unsigned Offset = DV->getDotDebugLocOffset(); unsigned Offset = DV->getDotDebugLocOffset();
if (Offset != ~0U) { if (Offset != ~0U) {
TheCU->addLabel(VariableDie, dwarf::DW_AT_location, dwarf::DW_FORM_data4, VariableCU->addLabel(VariableDie, dwarf::DW_AT_location, dwarf::DW_FORM_data4,
Asm->GetTempSymbol("debug_loc", Offset)); Asm->GetTempSymbol("debug_loc", Offset));
DV->setDIE(VariableDie); DV->setDIE(VariableDie);
UseDotDebugLocEntry.insert(VariableDie); UseDotDebugLocEntry.insert(VariableDie);
@ -696,25 +699,26 @@ DIE *DwarfDebug::constructVariableDIE(DbgVariable *DV, DbgScope *Scope) {
const TargetRegisterInfo *TRI = Asm->TM.getRegisterInfo(); const TargetRegisterInfo *TRI = Asm->TM.getRegisterInfo();
if (DVInsn->getOperand(1).isImm() && if (DVInsn->getOperand(1).isImm() &&
TRI->getFrameRegister(*Asm->MF) == RegOp.getReg()) { TRI->getFrameRegister(*Asm->MF) == RegOp.getReg()) {
TheCU->addFrameVariableAddress(DV, VariableDie, VariableCU->addFrameVariableAddress(DV, VariableDie,
DVInsn->getOperand(1).getImm()); DVInsn->getOperand(1).getImm());
updated = true; updated = true;
} else } else
updated = TheCU->addRegisterAddress(VariableDie, RegOp); updated = VariableCU->addRegisterAddress(VariableDie, RegOp);
} }
else if (DVInsn->getOperand(0).isImm()) else if (DVInsn->getOperand(0).isImm())
updated = TheCU->addConstantValue(VariableDie, DVInsn->getOperand(0)); updated = VariableCU->addConstantValue(VariableDie,
DVInsn->getOperand(0));
else if (DVInsn->getOperand(0).isFPImm()) else if (DVInsn->getOperand(0).isFPImm())
updated = updated =
TheCU->addConstantFPValue(VariableDie, DVInsn->getOperand(0)); VariableCU->addConstantFPValue(VariableDie, DVInsn->getOperand(0));
} else { } else {
MachineLocation Location = Asm->getDebugValueLocation(DVInsn); MachineLocation Location = Asm->getDebugValueLocation(DVInsn);
if (Location.getReg()) { if (Location.getReg()) {
if (DV->getVariable().hasComplexAddress()) if (DV->getVariable().hasComplexAddress())
TheCU->addComplexAddress(DV, VariableDie, dwarf::DW_AT_location, VariableCU->addComplexAddress(DV, VariableDie, dwarf::DW_AT_location,
Location); Location);
else else
TheCU->addAddress(VariableDie, dwarf::DW_AT_location, Location); VariableCU->addAddress(VariableDie, dwarf::DW_AT_location, Location);
updated = true; updated = true;
} }
} }
@ -731,7 +735,7 @@ DIE *DwarfDebug::constructVariableDIE(DbgVariable *DV, DbgScope *Scope) {
// .. else use frame index, if available. // .. else use frame index, if available.
int FI = 0; int FI = 0;
if (findVariableFrameIndex(DV, &FI)) if (findVariableFrameIndex(DV, &FI))
TheCU->addFrameVariableAddress(DV, VariableDie, FI); VariableCU->addFrameVariableAddress(DV, VariableDie, FI);
DV->setDIE(VariableDie); DV->setDIE(VariableDie);
return VariableDie; return VariableDie;