diff options
| author | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2015-04-16 01:53:33 +0000 |
|---|---|---|
| committer | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2015-04-16 01:53:33 +0000 |
| commit | f15c6f803268e880d3673e8b1a6dfee87982454e (patch) | |
| tree | 9ddfd12a9bbb5468d22152e9b0aa356fabe18be1 | |
| parent | 526ab07e3c07a6e130e797033a616953576c8830 (diff) | |
| download | bcm5719-llvm-f15c6f803268e880d3673e8b1a6dfee87982454e.tar.gz bcm5719-llvm-f15c6f803268e880d3673e8b1a6dfee87982454e.zip | |
DebugInfo: Gut DIDescriptor
PR23080 is almost finished. With this commit, there's no consequential
API in `DIDescriptor` and its subclasses. What's left?
- Default-constructed to `nullptr`.
- Handy `const_cast<>` (constructed from `const`, but accessors are
non-`const`).
I think the safe way to catch those is to delete the classes and fix
compile errors. That'll be my next step, after I delete the `DITypeRef`
(etc.) wrapper around `MDTypeRef`.
llvm-svn: 235069
| -rw-r--r-- | llvm/examples/Kaleidoscope/Chapter8/toy.cpp | 2 | ||||
| -rw-r--r-- | llvm/include/llvm/IR/DIBuilder.h | 2 | ||||
| -rw-r--r-- | llvm/include/llvm/IR/DebugInfo.h | 46 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp | 7 | ||||
| -rw-r--r-- | llvm/lib/IR/DIBuilder.cpp | 8 | ||||
| -rw-r--r-- | llvm/lib/IR/DebugInfo.cpp | 15 | ||||
| -rw-r--r-- | llvm/unittests/IR/MetadataTest.cpp | 8 |
7 files changed, 19 insertions, 69 deletions
diff --git a/llvm/examples/Kaleidoscope/Chapter8/toy.cpp b/llvm/examples/Kaleidoscope/Chapter8/toy.cpp index 5665c06a9af..21f2eb1d3ad 100644 --- a/llvm/examples/Kaleidoscope/Chapter8/toy.cpp +++ b/llvm/examples/Kaleidoscope/Chapter8/toy.cpp @@ -1232,7 +1232,7 @@ Function *PrototypeAST::Codegen() { DISubprogram SP = DBuilder->createFunction( FContext, Name, StringRef(), Unit, LineNo, CreateFunctionType(Args.size(), Unit), false /* internal linkage */, - true /* definition */, ScopeLine, DIDescriptor::FlagPrototyped, false, F); + true /* definition */, ScopeLine, DebugNode::FlagPrototyped, false, F); KSDbgInfo.FnScopeMap[this] = SP; return F; diff --git a/llvm/include/llvm/IR/DIBuilder.h b/llvm/include/llvm/IR/DIBuilder.h index cadfa3165c3..927cf40c970 100644 --- a/llvm/include/llvm/IR/DIBuilder.h +++ b/llvm/include/llvm/IR/DIBuilder.h @@ -428,7 +428,7 @@ namespace llvm { DICompositeType createReplaceableCompositeType( unsigned Tag, StringRef Name, DIDescriptor Scope, DIFile F, unsigned Line, unsigned RuntimeLang = 0, uint64_t SizeInBits = 0, - uint64_t AlignInBits = 0, unsigned Flags = DIDescriptor::FlagFwdDecl, + uint64_t AlignInBits = 0, unsigned Flags = DebugNode::FlagFwdDecl, StringRef UniqueIdentifier = StringRef()); /// retainType - Retain DIType in a module even if it is not referenced diff --git a/llvm/include/llvm/IR/DebugInfo.h b/llvm/include/llvm/IR/DebugInfo.h index 2d84f0f0ad6..3233ea34c60 100644 --- a/llvm/include/llvm/IR/DebugInfo.h +++ b/llvm/include/llvm/IR/DebugInfo.h @@ -58,51 +58,15 @@ class DIObjCProperty; /// \brief Maps from type identifier to the actual MDNode. typedef DenseMap<const MDString *, MDNode *> DITypeIdentifierMap; -/// \brief A thin wraper around MDNode to access encoded debug info. -/// -/// This should not be stored in a container, because the underlying MDNode may -/// change in certain situations. class DIDescriptor { -public: - /// \brief Duplicated debug info flags. - /// - /// \see DebugNode::DIFlags. - enum { -#define HANDLE_DI_FLAG(ID, NAME) Flag##NAME = DebugNode::Flag##NAME, -#include "llvm/IR/DebugInfoFlags.def" - FlagAccessibility = DebugNode::FlagAccessibility - }; - -protected: - const MDNode *DbgNode; + MDNode *N; public: - explicit DIDescriptor(const MDNode *N = nullptr) : DbgNode(N) {} - DIDescriptor(const DebugNode *N) : DbgNode(N) {} - - MDNode *get() const { return const_cast<MDNode *>(DbgNode); } - operator MDNode *() const { return get(); } - MDNode *operator->() const { return get(); } - MDNode &operator*() const { return *get(); } - - // An explicit operator bool so that we can do testing of DI values - // easily. - // FIXME: This operator bool isn't actually protecting anything at the - // moment due to the conversion operator above making DIDescriptor nodes - // implicitly convertable to bool. - explicit operator bool() const { return DbgNode != nullptr; } - - bool operator==(DIDescriptor Other) const { return DbgNode == Other.DbgNode; } - bool operator!=(DIDescriptor Other) const { return !operator==(Other); } - - uint16_t getTag() const { - if (auto *N = dyn_cast_or_null<DebugNode>(get())) - return N->getTag(); - return 0; - } + DIDescriptor(const MDNode *N = nullptr) : N(const_cast<MDNode *>(N)) {} - void print(raw_ostream &OS) const; - void dump() const; + operator MDNode *() const { return N; } + MDNode *operator->() const { return N; } + MDNode &operator*() const { return *N; } }; #define DECLARE_SIMPLIFY_DESCRIPTOR(DESC) \ diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp index 46f3eb3201d..91546529877 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp @@ -1405,9 +1405,10 @@ void DwarfUnit::constructArrayTypeDIE(DIE &Buffer, DICompositeType CTy) { // Add subranges to array type. DIArray Elements = CTy->getElements(); for (unsigned i = 0, N = Elements.size(); i < N; ++i) { - DIDescriptor Element = Elements[i]; - if (Element.getTag() == dwarf::DW_TAG_subrange_type) - constructSubrangeDIE(Buffer, cast<MDSubrange>(Element), IdxTy); + // FIXME: Should this really be such a loose cast? + if (auto *Element = dyn_cast_or_null<DebugNode>(Elements[i])) + if (Element->getTag() == dwarf::DW_TAG_subrange_type) + constructSubrangeDIE(Buffer, cast<MDSubrange>(Element), IdxTy); } } diff --git a/llvm/lib/IR/DIBuilder.cpp b/llvm/lib/IR/DIBuilder.cpp index 893f9f29548..67aa09a14a1 100644 --- a/llvm/lib/IR/DIBuilder.cpp +++ b/llvm/lib/IR/DIBuilder.cpp @@ -203,7 +203,7 @@ DIImportedEntity DIBuilder::createImportedDeclaration(DIScope Context, // types that have one. return ::createImportedModule( VMContext, dwarf::DW_TAG_imported_declaration, Context, - DebugNodeRef::get(cast_or_null<DebugNode>(Decl.get())), Line, Name, + DebugNodeRef::get(cast_or_null<DebugNode>(Decl)), Line, Name, AllImportedModules); } @@ -318,7 +318,7 @@ DIDerivedType DIBuilder::createStaticMemberType(DIDescriptor Scope, unsigned Flags, llvm::Constant *Val) { // TAG_member is encoded in DIDerivedType format. - Flags |= DIDescriptor::FlagStaticMember; + Flags |= DebugNode::FlagStaticMember; return MDDerivedType::get( VMContext, dwarf::DW_TAG_member, Name, File, LineNumber, MDScopeRef::get(DIScope(getNonCompileUnitScope(Scope))), @@ -529,8 +529,8 @@ DIBuilder::createForwardDecl(unsigned Tag, StringRef Name, DIDescriptor Scope, DICompositeType RetTy = MDCompositeType::get( VMContext, Tag, Name, F, Line, MDScopeRef::get(DIScope(getNonCompileUnitScope(Scope))), nullptr, - SizeInBits, AlignInBits, 0, DIDescriptor::FlagFwdDecl, nullptr, - RuntimeLang, nullptr, nullptr, UniqueIdentifier); + SizeInBits, AlignInBits, 0, DebugNode::FlagFwdDecl, nullptr, RuntimeLang, + nullptr, nullptr, UniqueIdentifier); if (!UniqueIdentifier.empty()) retainType(RetTy); trackIfUnresolved(RetTy); diff --git a/llvm/lib/IR/DebugInfo.cpp b/llvm/lib/IR/DebugInfo.cpp index d3388cbabef..d877325b1f1 100644 --- a/llvm/lib/IR/DebugInfo.cpp +++ b/llvm/lib/IR/DebugInfo.cpp @@ -307,21 +307,6 @@ bool DebugInfoFinder::addScope(DIScope Scope) { return true; } -//===----------------------------------------------------------------------===// -// DIDescriptor: dump routines for all descriptors. -//===----------------------------------------------------------------------===// - -void DIDescriptor::dump() const { - print(dbgs()); - dbgs() << '\n'; -} - -void DIDescriptor::print(raw_ostream &OS) const { - if (!get()) - return; - get()->print(OS); -} - template <> DIDescriptor DIRef<DIDescriptor>::resolve(const DITypeIdentifierMap &Map) const { diff --git a/llvm/unittests/IR/MetadataTest.cpp b/llvm/unittests/IR/MetadataTest.cpp index 46e376a9ad2..8b4c5db73e3 100644 --- a/llvm/unittests/IR/MetadataTest.cpp +++ b/llvm/unittests/IR/MetadataTest.cpp @@ -947,15 +947,15 @@ TEST_F(MDTypeTest, setFlags) { MDType *D = MDSubroutineType::getDistinct(Context, 0u, Types); EXPECT_EQ(0u, D->getFlags()); - D->setFlags(DIDescriptor::FlagRValueReference); - EXPECT_EQ(DIDescriptor::FlagRValueReference, D->getFlags()); + D->setFlags(DebugNode::FlagRValueReference); + EXPECT_EQ(DebugNode::FlagRValueReference, D->getFlags()); D->setFlags(0u); EXPECT_EQ(0u, D->getFlags()); TempMDType T = MDSubroutineType::getTemporary(Context, 0u, Types); EXPECT_EQ(0u, T->getFlags()); - T->setFlags(DIDescriptor::FlagRValueReference); - EXPECT_EQ(DIDescriptor::FlagRValueReference, T->getFlags()); + T->setFlags(DebugNode::FlagRValueReference); + EXPECT_EQ(DebugNode::FlagRValueReference, T->getFlags()); T->setFlags(0u); EXPECT_EQ(0u, T->getFlags()); } |

