[llvm] r235069 - DebugInfo: Gut DIDescriptor

David Blaikie dblaikie at gmail.com
Wed Apr 15 19:37:27 PDT 2015


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.

> 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