summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDavid Blaikie <dblaikie@gmail.com>2014-04-25 17:32:19 +0000
committerDavid Blaikie <dblaikie@gmail.com>2014-04-25 17:32:19 +0000
commit7d772dda4e228b4034c300c2c2955e14f0f89885 (patch)
treead1941a77964aaa63fdca55774211b444e981614 /lib
parent04f826c0625a9701dd941fa0fb5db110f5971421 (diff)
downloadllvm-7d772dda4e228b4034c300c2c2955e14f0f89885.tar.gz
llvm-7d772dda4e228b4034c300c2c2955e14f0f89885.tar.bz2
llvm-7d772dda4e228b4034c300c2c2955e14f0f89885.tar.xz
Refactor some common logic in DwarfUnit::constructVariableDIE and pass non-null DIE by reference to DbgVariable::setDIE
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@207244 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/CodeGen/AsmPrinter/DwarfDebug.h2
-rw-r--r--lib/CodeGen/AsmPrinter/DwarfUnit.cpp34
-rw-r--r--lib/CodeGen/AsmPrinter/DwarfUnit.h4
3 files changed, 23 insertions, 17 deletions
diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.h b/lib/CodeGen/AsmPrinter/DwarfDebug.h
index 5e8ef28a87..839a8a0253 100644
--- a/lib/CodeGen/AsmPrinter/DwarfDebug.h
+++ b/lib/CodeGen/AsmPrinter/DwarfDebug.h
@@ -83,7 +83,7 @@ public:
// Accessors.
DIVariable getVariable() const { return Var; }
- void setDIE(DIE *D) { TheDIE = D; }
+ void setDIE(DIE &D) { TheDIE = &D; }
DIE *getDIE() const { return TheDIE; }
void setDotDebugLocOffset(unsigned O) { DotDebugLocOffset = O; }
unsigned getDotDebugLocOffset() const { return DotDebugLocOffset; }
diff --git a/lib/CodeGen/AsmPrinter/DwarfUnit.cpp b/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
index 6a2cb6880c..47d2157e4c 100644
--- a/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
+++ b/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
@@ -1802,6 +1802,13 @@ void DwarfUnit::constructContainingTypeDIEs() {
/// constructVariableDIE - Construct a DIE for the given DbgVariable.
DIE *DwarfUnit::constructVariableDIE(DbgVariable &DV, bool isScopeAbstract) {
+ auto D = constructVariableDIEImpl(DV, isScopeAbstract);
+ DV.setDIE(*D);
+ return D;
+}
+
+DIE *DwarfUnit::constructVariableDIEImpl(const DbgVariable &DV,
+ bool isScopeAbstract) {
StringRef Name = DV.getName();
// Define variable debug information entry.
@@ -1820,17 +1827,14 @@ DIE *DwarfUnit::constructVariableDIE(DbgVariable &DV, bool isScopeAbstract) {
if (DV.isArtificial())
addFlag(VariableDie, dwarf::DW_AT_artificial);
- if (isScopeAbstract) {
- DV.setDIE(VariableDie);
+ if (isScopeAbstract)
return VariableDie;
- }
// Add variable address.
unsigned Offset = DV.getDotDebugLocOffset();
if (Offset != ~0U) {
addLocationList(VariableDie, dwarf::DW_AT_location, Offset);
- DV.setDIE(VariableDie);
return VariableDie;
}
@@ -1854,21 +1858,19 @@ DIE *DwarfUnit::constructVariableDIE(DbgVariable &DV, bool isScopeAbstract) {
addConstantValue(VariableDie, DVInsn->getOperand(0).getCImm(),
isUnsignedDIType(DD, DV.getType()));
- DV.setDIE(VariableDie);
return VariableDie;
- } else {
- // .. else use frame index.
- int FI = DV.getFrameIndex();
- if (FI != ~0) {
- unsigned FrameReg = 0;
- const TargetFrameLowering *TFI = Asm->TM.getFrameLowering();
- int Offset = TFI->getFrameIndexReference(*Asm->MF, FI, FrameReg);
- MachineLocation Location(FrameReg, Offset);
- addVariableAddress(DV, VariableDie, Location);
- }
}
- DV.setDIE(VariableDie);
+ // .. else use frame index.
+ int FI = DV.getFrameIndex();
+ if (FI != ~0) {
+ unsigned FrameReg = 0;
+ const TargetFrameLowering *TFI = Asm->TM.getFrameLowering();
+ int Offset = TFI->getFrameIndexReference(*Asm->MF, FI, FrameReg);
+ MachineLocation Location(FrameReg, Offset);
+ addVariableAddress(DV, VariableDie, Location);
+ }
+
return VariableDie;
}
diff --git a/lib/CodeGen/AsmPrinter/DwarfUnit.h b/lib/CodeGen/AsmPrinter/DwarfUnit.h
index c3c9660d47..3974775aa8 100644
--- a/lib/CodeGen/AsmPrinter/DwarfUnit.h
+++ b/lib/CodeGen/AsmPrinter/DwarfUnit.h
@@ -457,6 +457,10 @@ protected:
virtual unsigned getOrCreateSourceID(StringRef File, StringRef Directory) = 0;
private:
+ /// \brief Construct a DIE for the given DbgVariable without initializing the
+ /// DbgVariable's DIE reference.
+ DIE *constructVariableDIEImpl(const DbgVariable &DV, bool isScopeAbstract);
+
/// constructTypeDIE - Construct basic type die from DIBasicType.
void constructTypeDIE(DIE &Buffer, DIBasicType BTy);