[llvm] r235069 - DebugInfo: Gut DIDescriptor
Duncan P. N. Exon Smith
dexonsmith at apple.com
Thu Apr 16 09:52:03 PDT 2015
> On 2015-Apr-15, at 19:37, David Blaikie <dblaikie at gmail.com> wrote:
>
> On Wed, Apr 15, 2015 at 6:53 PM, Duncan P. N. Exon Smith
> <dexonsmith at apple.com> wrote:
>> Author: dexonsmith
>> Date: Wed Apr 15 20:53:33 2015
>> New Revision: 235069
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=235069&view=rev
>> Log:
>> 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.
>
> The default-to-null won't produce compilation errors (well, in some
> cases it will), though - might need a bit of caution there.
Yup. I'm planning to delete the classes in groups (top down, starting
with `DIDescriptor` itself). I'm counting on noticing all the
variable declarations that don't have explicit initialization when I'm
forced to replace the type.
>
>> That'll be my next step, after I delete the `DITypeRef`
>> (etc.) wrapper around `MDTypeRef`.
>>
>> Modified:
>> llvm/trunk/examples/Kaleidoscope/Chapter8/toy.cpp
>> llvm/trunk/include/llvm/IR/DIBuilder.h
>> llvm/trunk/include/llvm/IR/DebugInfo.h
>> llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
>> llvm/trunk/lib/IR/DIBuilder.cpp
>> llvm/trunk/lib/IR/DebugInfo.cpp
>> llvm/trunk/unittests/IR/MetadataTest.cpp
>>
>> Modified: llvm/trunk/examples/Kaleidoscope/Chapter8/toy.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/examples/Kaleidoscope/Chapter8/toy.cpp?rev=235069&r1=235068&r2=235069&view=diff
>> ==============================================================================
>> --- llvm/trunk/examples/Kaleidoscope/Chapter8/toy.cpp (original)
>> +++ llvm/trunk/examples/Kaleidoscope/Chapter8/toy.cpp Wed Apr 15 20:53:33 2015
>> @@ -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;
>>
>> Modified: llvm/trunk/include/llvm/IR/DIBuilder.h
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/DIBuilder.h?rev=235069&r1=235068&r2=235069&view=diff
>> ==============================================================================
>> --- llvm/trunk/include/llvm/IR/DIBuilder.h (original)
>> +++ llvm/trunk/include/llvm/IR/DIBuilder.h Wed Apr 15 20:53:33 2015
>> @@ -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
>>
>> Modified: llvm/trunk/include/llvm/IR/DebugInfo.h
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/DebugInfo.h?rev=235069&r1=235068&r2=235069&view=diff
>> ==============================================================================
>> --- llvm/trunk/include/llvm/IR/DebugInfo.h (original)
>> +++ llvm/trunk/include/llvm/IR/DebugInfo.h Wed Apr 15 20:53:33 2015
>> @@ -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) \
>>
>> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp?rev=235069&r1=235068&r2=235069&view=diff
>> ==============================================================================
>> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp (original)
>> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp Wed Apr 15 20:53:33 2015
>> @@ -1405,9 +1405,10 @@ void DwarfUnit::constructArrayTypeDIE(DI
>> // 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);
>> }
>> }
>>
>>
>> Modified: llvm/trunk/lib/IR/DIBuilder.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/DIBuilder.cpp?rev=235069&r1=235068&r2=235069&view=diff
>> ==============================================================================
>> --- llvm/trunk/lib/IR/DIBuilder.cpp (original)
>> +++ llvm/trunk/lib/IR/DIBuilder.cpp Wed Apr 15 20:53:33 2015
>> @@ -203,7 +203,7 @@ DIImportedEntity DIBuilder::createImport
>> // 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::createStaticMem
>> 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 Ta
>> 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);
>>
>> Modified: llvm/trunk/lib/IR/DebugInfo.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/DebugInfo.cpp?rev=235069&r1=235068&r2=235069&view=diff
>> ==============================================================================
>> --- llvm/trunk/lib/IR/DebugInfo.cpp (original)
>> +++ llvm/trunk/lib/IR/DebugInfo.cpp Wed Apr 15 20:53:33 2015
>> @@ -307,21 +307,6 @@ bool DebugInfoFinder::addScope(DIScope S
>> 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 {
>>
>> Modified: llvm/trunk/unittests/IR/MetadataTest.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/IR/MetadataTest.cpp?rev=235069&r1=235068&r2=235069&view=diff
>> ==============================================================================
>> --- llvm/trunk/unittests/IR/MetadataTest.cpp (original)
>> +++ llvm/trunk/unittests/IR/MetadataTest.cpp Wed Apr 15 20:53:33 2015
>> @@ -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());
>> }
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list