diff options
author | David Blaikie <dblaikie@gmail.com> | 2014-04-25 17:32:19 +0000 |
---|---|---|
committer | David Blaikie <dblaikie@gmail.com> | 2014-04-25 17:32:19 +0000 |
commit | 7d772dda4e228b4034c300c2c2955e14f0f89885 (patch) | |
tree | ad1941a77964aaa63fdca55774211b444e981614 /lib | |
parent | 04f826c0625a9701dd941fa0fb5db110f5971421 (diff) | |
download | llvm-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.h | 2 | ||||
-rw-r--r-- | lib/CodeGen/AsmPrinter/DwarfUnit.cpp | 34 | ||||
-rw-r--r-- | lib/CodeGen/AsmPrinter/DwarfUnit.h | 4 |
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); |