[llvm] r235067 - DebugInfo: Gut DIScope, DIEnumerator and DISubrange
Duncan P. N. Exon Smith
dexonsmith at apple.com
Wed Apr 15 18:37:00 PDT 2015
Author: dexonsmith
Date: Wed Apr 15 20:37:00 2015
New Revision: 235067
URL: http://llvm.org/viewvc/llvm-project?rev=235067&view=rev
Log:
DebugInfo: Gut DIScope, DIEnumerator and DISubrange
The only class the still has API left is `DIDescriptor` itself.
Modified:
llvm/trunk/include/llvm/IR/DebugInfo.h
llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
llvm/trunk/lib/CodeGen/AsmPrinter/WinCodeViewLineTables.cpp
llvm/trunk/lib/CodeGen/LiveDebugVariables.cpp
llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp
llvm/trunk/lib/IR/DIBuilder.cpp
llvm/trunk/lib/IR/DebugInfo.cpp
llvm/trunk/lib/IR/DebugLoc.cpp
llvm/trunk/lib/Target/NVPTX/NVPTXAsmPrinter.cpp
llvm/trunk/lib/Transforms/Utils/AddDiscriminators.cpp
Modified: llvm/trunk/include/llvm/IR/DebugInfo.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/DebugInfo.h?rev=235067&r1=235066&r2=235067&view=diff
==============================================================================
--- llvm/trunk/include/llvm/IR/DebugInfo.h (original)
+++ llvm/trunk/include/llvm/IR/DebugInfo.h Wed Apr 15 20:37:00 2015
@@ -137,41 +137,27 @@ DECLARE_SIMPLIFY_DESCRIPTOR(DIImportedEn
typedef DebugNodeArray DIArray;
typedef MDTypeRefArray DITypeArray;
-/// \brief This is used to represent ranges, for array bounds.
-class DISubrange : public DIDescriptor {
-public:
- DISubrange() = default;
- DISubrange(const MDSubrange *N) : DIDescriptor(N) {}
+class DISubrange {
+ MDSubrange *N;
- MDSubrange *get() const {
- return cast_or_null<MDSubrange>(DIDescriptor::get());
- }
- operator MDSubrange *() const { return get(); }
- MDSubrange *operator->() const { return get(); }
- MDSubrange &operator*() const { return *get(); }
+public:
+ DISubrange(const MDSubrange *N = nullptr) : N(const_cast<MDSubrange *>(N)) {}
- int64_t getLo() const { return get()->getLowerBound(); }
- int64_t getCount() const { return get()->getCount(); }
+ operator MDSubrange *() const { return N; }
+ MDSubrange *operator->() const { return N; }
+ MDSubrange &operator*() const { return *N; }
};
-/// \brief A wrapper for an enumerator (e.g. X and Y in 'enum {X,Y}').
-///
-/// FIXME: it seems strange that this doesn't have either a reference to the
-/// type/precision or a file/line pair for location info.
-class DIEnumerator : public DIDescriptor {
-public:
- DIEnumerator() = default;
- DIEnumerator(const MDEnumerator *N) : DIDescriptor(N) {}
+class DIEnumerator {
+ MDEnumerator *N;
- MDEnumerator *get() const {
- return cast_or_null<MDEnumerator>(DIDescriptor::get());
- }
- operator MDEnumerator *() const { return get(); }
- MDEnumerator *operator->() const { return get(); }
- MDEnumerator &operator*() const { return *get(); }
+public:
+ DIEnumerator(const MDEnumerator *N = nullptr)
+ : N(const_cast<MDEnumerator *>(N)) {}
- StringRef getName() const { return get()->getName(); }
- int64_t getEnumValue() const { return get()->getValue(); }
+ operator MDEnumerator *() const { return N; }
+ MDEnumerator *operator->() const { return N; }
+ MDEnumerator &operator*() const { return *N; }
};
template <typename T> class DIRef;
@@ -179,34 +165,16 @@ typedef DIRef<DIDescriptor> DIDescriptor
typedef DIRef<DIScope> DIScopeRef;
typedef DIRef<DIType> DITypeRef;
-/// \brief A base class for various scopes.
-///
-/// Although, implementation-wise, DIScope is the parent class of most
-/// other DIxxx classes, including DIType and its descendants, most of
-/// DIScope's descendants are not a substitutable subtype of
-/// DIScope. The DIDescriptor::isScope() method only is true for
-/// DIScopes that are scopes in the strict lexical scope sense
-/// (DICompileUnit, DISubprogram, etc.), but not for, e.g., a DIType.
-class DIScope : public DIDescriptor {
-public:
- DIScope() = default;
- DIScope(const MDScope *N) : DIDescriptor(N) {}
+class DIScope {
+ MDScope *N;
- MDScope *get() const { return cast_or_null<MDScope>(DIDescriptor::get()); }
- operator MDScope *() const { return get(); }
- MDScope *operator->() const { return get(); }
- MDScope &operator*() const { return *get(); }
-
- inline DIScopeRef getContext() const;
- StringRef getName() const { return get()->getName(); }
- StringRef getFilename() const { return get()->getFilename(); }
- StringRef getDirectory() const { return get()->getDirectory(); }
+public:
+ DIScope(const MDScope *N = nullptr) : N(const_cast<MDScope *>(N)) {}
- /// \brief Generate a reference to this DIScope.
- ///
- /// Uses the type identifier instead of the actual MDNode if possible, to
- /// help type uniquing.
- DIScopeRef getRef() const;
+ operator DIDescriptor() const { return N; }
+ operator MDScope *() const { return N; }
+ MDScope *operator->() const { return N; }
+ MDScope &operator*() const { return *N; }
};
/// \brief Represents reference to a DIDescriptor.
@@ -235,8 +203,6 @@ template <>
DIScope DIRef<DIScope>::resolve(const DITypeIdentifierMap &Map) const;
template <> DIType DIRef<DIType>::resolve(const DITypeIdentifierMap &Map) const;
-DIScopeRef DIScope::getContext() const { return get()->getScope(); }
-
class DIType {
MDType *N;
Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=235067&r1=235066&r2=235067&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp (original)
+++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Wed Apr 15 20:37:00 2015
@@ -1251,9 +1251,9 @@ void DwarfDebug::recordSourceLine(unsign
StringRef Dir;
unsigned Src = 1;
unsigned Discriminator = 0;
- if (DIScope Scope = cast_or_null<MDScope>(S)) {
- Fn = Scope.getFilename();
- Dir = Scope.getDirectory();
+ if (auto *Scope = cast_or_null<MDScope>(S)) {
+ Fn = Scope->getFilename();
+ Dir = Scope->getDirectory();
if (auto *LBF = dyn_cast<MDLexicalBlockFile>(Scope))
Discriminator = LBF->getDiscriminator();
Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp?rev=235067&r1=235066&r2=235067&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp (original)
+++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp Wed Apr 15 20:37:00 2015
@@ -903,8 +903,8 @@ std::string DwarfUnit::getParentContextS
SmallVector<DIScope, 1> Parents;
while (!isa<MDCompileUnit>(Context)) {
Parents.push_back(Context);
- if (Context.getContext())
- Context = resolve(Context.getContext());
+ if (Context->getScope())
+ Context = resolve(Context->getScope());
else
// Structure, etc types will have a NULL context if they're at the top
// level.
@@ -916,8 +916,8 @@ std::string DwarfUnit::getParentContextS
for (SmallVectorImpl<DIScope>::reverse_iterator I = Parents.rbegin(),
E = Parents.rend();
I != E; ++I) {
- DIScope Ctx = *I;
- StringRef Name = Ctx.getName();
+ const MDScope *Ctx = *I;
+ StringRef Name = Ctx->getName();
if (Name.empty() && isa<MDNamespace>(Ctx))
Name = "(anonymous namespace)";
if (!Name.empty()) {
@@ -1364,9 +1364,9 @@ void DwarfUnit::constructSubrangeDIE(DIE
// C/C++. The Count value is the number of elements. Values are 64 bit. If
// Count == -1 then the array is unbounded and we do not emit
// DW_AT_lower_bound and DW_AT_count attributes.
- int64_t LowerBound = SR.getLo();
+ int64_t LowerBound = SR->getLowerBound();
int64_t DefaultLowerBound = getDefaultLowerBound();
- int64_t Count = SR.getCount();
+ int64_t Count = SR->getCount();
if (DefaultLowerBound == -1 || LowerBound != DefaultLowerBound)
addUInt(DW_Subrange, dwarf::DW_AT_lower_bound, None, LowerBound);
@@ -1417,12 +1417,12 @@ void DwarfUnit::constructEnumTypeDIE(DIE
// Add enumerators to enumeration type.
for (unsigned i = 0, N = Elements.size(); i < N; ++i) {
- DIEnumerator Enum = dyn_cast_or_null<MDEnumerator>(Elements[i]);
+ auto *Enum = dyn_cast_or_null<MDEnumerator>(Elements[i]);
if (Enum) {
DIE &Enumerator = createAndAddDIE(dwarf::DW_TAG_enumerator, Buffer);
- StringRef Name = Enum.getName();
+ StringRef Name = Enum->getName();
addString(Enumerator, dwarf::DW_AT_name, Name);
- int64_t Value = Enum.getEnumValue();
+ int64_t Value = Enum->getValue();
addSInt(Enumerator, dwarf::DW_AT_const_value, dwarf::DW_FORM_sdata,
Value);
}
Modified: llvm/trunk/lib/CodeGen/AsmPrinter/WinCodeViewLineTables.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/WinCodeViewLineTables.cpp?rev=235067&r1=235066&r2=235067&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/AsmPrinter/WinCodeViewLineTables.cpp (original)
+++ llvm/trunk/lib/CodeGen/AsmPrinter/WinCodeViewLineTables.cpp Wed Apr 15 20:37:00 2015
@@ -24,9 +24,9 @@ StringRef WinCodeViewLineTables::getFull
isa<MDLexicalBlockBase>(S)) &&
"Unexpected scope info");
- DIScope Scope = cast<MDScope>(S);
- StringRef Dir = Scope.getDirectory(),
- Filename = Scope.getFilename();
+ auto *Scope = cast<MDScope>(S);
+ StringRef Dir = Scope->getDirectory(),
+ Filename = Scope->getFilename();
char *&Result = DirAndFilenameToFilepathMap[std::make_pair(Dir, Filename)];
if (Result)
return Result;
Modified: llvm/trunk/lib/CodeGen/LiveDebugVariables.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveDebugVariables.cpp?rev=235067&r1=235066&r2=235067&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/LiveDebugVariables.cpp (original)
+++ llvm/trunk/lib/CodeGen/LiveDebugVariables.cpp Wed Apr 15 20:37:00 2015
@@ -362,9 +362,9 @@ static void printDebugLoc(DebugLoc DL, r
if (!DL)
return;
- DIScope Scope = cast<MDScope>(DL.getScope());
+ auto *Scope = cast<MDScope>(DL.getScope());
// Omit the directory, because it's likely to be long and uninteresting.
- CommentOS << Scope.getFilename();
+ CommentOS << Scope->getFilename();
CommentOS << ':' << DL.getLine();
if (DL.getCol() != 0)
CommentOS << ':' << DL.getCol();
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp?rev=235067&r1=235066&r2=235067&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp Wed Apr 15 20:37:00 2015
@@ -527,8 +527,8 @@ void SDNode::print_details(raw_ostream &
if (!L)
return;
- if (DIScope Scope = L->getScope())
- OS << Scope.getFilename();
+ if (auto *Scope = L->getScope())
+ OS << Scope->getFilename();
else
OS << "<unknown>";
OS << ':' << L->getLine();
Modified: llvm/trunk/lib/IR/DIBuilder.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/DIBuilder.cpp?rev=235067&r1=235066&r2=235067&view=diff
==============================================================================
--- llvm/trunk/lib/IR/DIBuilder.cpp (original)
+++ llvm/trunk/lib/IR/DIBuilder.cpp Wed Apr 15 20:37:00 2015
@@ -348,8 +348,7 @@ DIBuilder::createObjCProperty(StringRef
DITemplateTypeParameter
DIBuilder::createTemplateTypeParameter(DIDescriptor Context, StringRef Name,
DIType Ty) {
- assert((!Context || isa<MDCompileUnit>(Context.get())) &&
- "Expected compile unit");
+ assert((!Context || isa<MDCompileUnit>(Context)) && "Expected compile unit");
return MDTemplateTypeParameter::get(VMContext, Name, MDTypeRef::get(Ty));
}
@@ -357,8 +356,7 @@ static DITemplateValueParameter
createTemplateValueParameterHelper(LLVMContext &VMContext, unsigned Tag,
DIDescriptor Context, StringRef Name,
DIType Ty, Metadata *MD) {
- assert((!Context || isa<MDCompileUnit>(Context.get())) &&
- "Expected compile unit");
+ assert((!Context || isa<MDCompileUnit>(Context)) && "Expected compile unit");
return MDTemplateValueParameter::get(VMContext, Tag, Name, MDTypeRef::get(Ty),
MD);
}
@@ -590,10 +588,10 @@ DIGlobalVariable DIBuilder::createGlobal
MDNode *Decl) {
checkGlobalVariableScope(Context);
- auto *N = MDGlobalVariable::get(
- VMContext, cast_or_null<MDScope>(Context.get()), Name, LinkageName, F,
- LineNumber, MDTypeRef::get(Ty), isLocalToUnit, true, Val,
- cast_or_null<MDDerivedType>(Decl));
+ auto *N = MDGlobalVariable::get(VMContext, cast_or_null<MDScope>(Context),
+ Name, LinkageName, F, LineNumber,
+ MDTypeRef::get(Ty), isLocalToUnit, true, Val,
+ cast_or_null<MDDerivedType>(Decl));
AllGVs.push_back(N);
return N;
}
@@ -605,9 +603,10 @@ DIGlobalVariable DIBuilder::createTempGl
checkGlobalVariableScope(Context);
return MDGlobalVariable::getTemporary(
- VMContext, cast_or_null<MDScope>(Context.get()), Name, LinkageName,
- F, LineNumber, MDTypeRef::get(Ty), isLocalToUnit, false, Val,
- cast_or_null<MDDerivedType>(Decl)).release();
+ VMContext, cast_or_null<MDScope>(Context), Name, LinkageName, F,
+ LineNumber, MDTypeRef::get(Ty), isLocalToUnit, false, Val,
+ cast_or_null<MDDerivedType>(Decl))
+ .release();
}
DIVariable DIBuilder::createLocalVariable(unsigned Tag, DIDescriptor Scope,
@@ -622,8 +621,8 @@ DIVariable DIBuilder::createLocalVariabl
DIScope Context = getNonCompileUnitScope(Scope);
auto *Node = MDLocalVariable::get(
- VMContext, Tag, cast_or_null<MDLocalScope>(Context.get()), Name, File,
- LineNo, MDTypeRef::get(Ty), ArgNo, Flags);
+ VMContext, Tag, cast_or_null<MDLocalScope>(Context), Name, File, LineNo,
+ MDTypeRef::get(Ty), ArgNo, Flags);
if (AlwaysPreserve) {
// The optimizer may remove local variable. If there is an interest
// to preserve variable info in such situation then stash it in a
Modified: llvm/trunk/lib/IR/DebugInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/DebugInfo.cpp?rev=235067&r1=235066&r2=235067&view=diff
==============================================================================
--- llvm/trunk/lib/IR/DebugInfo.cpp (original)
+++ llvm/trunk/lib/IR/DebugInfo.cpp Wed Apr 15 20:37:00 2015
@@ -33,8 +33,6 @@
using namespace llvm;
using namespace llvm::dwarf;
-DIScopeRef DIScope::getRef() const { return MDScopeRef::get(get()); }
-
DISubprogram llvm::getDISubprogram(const MDNode *Scope) {
if (auto *LocalScope = dyn_cast_or_null<MDLocalScope>(Scope))
return LocalScope->getSubprogram();
Modified: llvm/trunk/lib/IR/DebugLoc.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/DebugLoc.cpp?rev=235067&r1=235066&r2=235067&view=diff
==============================================================================
--- llvm/trunk/lib/IR/DebugLoc.cpp (original)
+++ llvm/trunk/lib/IR/DebugLoc.cpp Wed Apr 15 20:37:00 2015
@@ -86,8 +86,8 @@ void DebugLoc::print(raw_ostream &OS) co
return;
// Print source line info.
- DIScope Scope = cast<MDScope>(getScope());
- OS << Scope.getFilename();
+ auto *Scope = cast<MDScope>(getScope());
+ OS << Scope->getFilename();
OS << ':' << getLine();
if (getCol() != 0)
OS << ':' << getCol();
Modified: llvm/trunk/lib/Target/NVPTX/NVPTXAsmPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/NVPTX/NVPTXAsmPrinter.cpp?rev=235067&r1=235066&r2=235067&view=diff
==============================================================================
--- llvm/trunk/lib/Target/NVPTX/NVPTXAsmPrinter.cpp (original)
+++ llvm/trunk/lib/Target/NVPTX/NVPTXAsmPrinter.cpp Wed Apr 15 20:37:00 2015
@@ -129,12 +129,12 @@ void NVPTXAsmPrinter::emitLineNumberAsDo
if (!curLoc)
return;
- DIScope Scope = cast_or_null<MDScope>(curLoc.getScope());
+ auto *Scope = cast_or_null<MDScope>(curLoc.getScope());
if (!Scope)
return;
- StringRef fileName(Scope.getFilename());
- StringRef dirName(Scope.getDirectory());
+ StringRef fileName(Scope->getFilename());
+ StringRef dirName(Scope->getDirectory());
SmallString<128> FullPathName = dirName;
if (!dirName.empty() && !sys::path::is_absolute(fileName)) {
sys::path::append(FullPathName, fileName);
Modified: llvm/trunk/lib/Transforms/Utils/AddDiscriminators.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/AddDiscriminators.cpp?rev=235067&r1=235066&r2=235067&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Utils/AddDiscriminators.cpp (original)
+++ llvm/trunk/lib/Transforms/Utils/AddDiscriminators.cpp Wed Apr 15 20:37:00 2015
@@ -193,8 +193,8 @@ bool AddDiscriminators::runOnFunction(Fu
// Create a new lexical scope and compute a new discriminator
// number for it.
StringRef Filename = FirstDIL->getFilename();
- DIScope Scope = FirstDIL->getScope();
- DIFile File = Builder.createFile(Filename, Scope.getDirectory());
+ auto *Scope = FirstDIL->getScope();
+ DIFile File = Builder.createFile(Filename, Scope->getDirectory());
// FIXME: Calculate the discriminator here, based on local information,
// and delete MDLocation::computeNewDiscriminator(). The current
More information about the llvm-commits
mailing list