From: Duncan P. N. Exon Smith Date: Mon, 20 Apr 2015 18:32:29 +0000 (+0000) Subject: DebugInfo: Remove DIScope X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=commitdiff_plain;h=b54df5252a94075d5d070818b7da0dbc9a71d379 DebugInfo: Remove DIScope Replace uses of `DIScope` with `MDScope*`. There was one spot where I've left an `MDScope*` uninitialized (where `DIScope` would have been default-initialized to `nullptr`) -- this is intentional, since the if/else that follows should unconditional assign it to a value. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@235327 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/examples/Kaleidoscope/Chapter8/toy.cpp b/examples/Kaleidoscope/Chapter8/toy.cpp index c7e096cc484..7b714cac7c6 100644 --- a/examples/Kaleidoscope/Chapter8/toy.cpp +++ b/examples/Kaleidoscope/Chapter8/toy.cpp @@ -93,13 +93,13 @@ class ExprAST; } static IRBuilder<> Builder(getGlobalContext()); struct DebugInfo { - DICompileUnit TheCU; - DIType DblTy; - std::vector LexicalBlocks; - std::map FnScopeMap; + MDCompileUnit *TheCU; + MDType *DblTy; + std::vector LexicalBlocks; + std::map FnScopeMap; void emitLocation(ExprAST *AST); - DIType getDoubleTy(); + MDType *getDoubleTy(); } KSDbgInfo; static std::string IdentifierStr; // Filled in if tok_identifier @@ -816,7 +816,7 @@ static PrototypeAST *ParseExtern() { static DIBuilder *DBuilder; -DIType DebugInfo::getDoubleTy() { +MDType *DebugInfo::getDoubleTy() { if (DblTy) return DblTy; @@ -836,9 +836,9 @@ void DebugInfo::emitLocation(ExprAST *AST) { DebugLoc::get(AST->getLine(), AST->getCol(), Scope)); } -static MDSubroutineType *CreateFunctionType(unsigned NumArgs, DIFile Unit) { +static MDSubroutineType *CreateFunctionType(unsigned NumArgs, MDFile *Unit) { SmallVector EltTys; - DIType DblTy = KSDbgInfo.getDoubleTy(); + MDType *DblTy = KSDbgInfo.getDoubleTy(); // Add the result type. EltTys.push_back(DblTy); @@ -846,8 +846,8 @@ static MDSubroutineType *CreateFunctionType(unsigned NumArgs, DIFile Unit) { for (unsigned i = 0, e = NumArgs; i != e; ++i) EltTys.push_back(DblTy); - DITypeArray EltTypeArray = DBuilder->getOrCreateTypeArray(EltTys); - return DBuilder->createSubroutineType(Unit, EltTypeArray); + return DBuilder->createSubroutineType(Unit, + DBuilder->getOrCreateTypeArray(EltTys)); } //===----------------------------------------------------------------------===// @@ -1224,12 +1224,12 @@ Function *PrototypeAST::Codegen() { AI->setName(Args[Idx]); // Create a subprogram DIE for this function. - DIFile Unit = DBuilder->createFile(KSDbgInfo.TheCU->getFilename(), - KSDbgInfo.TheCU->getDirectory()); + MDFile *Unit = DBuilder->createFile(KSDbgInfo.TheCU->getFilename(), + KSDbgInfo.TheCU->getDirectory()); MDScope *FContext = Unit; unsigned LineNo = Line; unsigned ScopeLine = Line; - DISubprogram SP = DBuilder->createFunction( + MDSubprogram *SP = DBuilder->createFunction( FContext, Name, StringRef(), Unit, LineNo, CreateFunctionType(Args.size(), Unit), false /* internal linkage */, true /* definition */, ScopeLine, DebugNode::FlagPrototyped, false, F); @@ -1247,15 +1247,15 @@ void PrototypeAST::CreateArgumentAllocas(Function *F) { AllocaInst *Alloca = CreateEntryBlockAlloca(F, Args[Idx]); // Create a debug descriptor for the variable. - DIScope *Scope = KSDbgInfo.LexicalBlocks.back(); - DIFile Unit = DBuilder->createFile(KSDbgInfo.TheCU->getFilename(), - KSDbgInfo.TheCU->getDirectory()); - DIVariable D = DBuilder->createLocalVariable(dwarf::DW_TAG_arg_variable, - *Scope, Args[Idx], Unit, Line, - KSDbgInfo.getDoubleTy(), Idx); + MDScope *Scope = KSDbgInfo.LexicalBlocks.back(); + MDFile *Unit = DBuilder->createFile(KSDbgInfo.TheCU->getFilename(), + KSDbgInfo.TheCU->getDirectory()); + MDLocalVariable *D = DBuilder->createLocalVariable( + dwarf::DW_TAG_arg_variable, Scope, Args[Idx], Unit, Line, + KSDbgInfo.getDoubleTy(), Idx); DBuilder->insertDeclare(Alloca, D, DBuilder->createExpression(), - DebugLoc::get(Line, 0, *Scope), + DebugLoc::get(Line, 0, Scope), Builder.GetInsertBlock()); // Store the initial value into the alloca. diff --git a/include/llvm/IR/DebugInfo.h b/include/llvm/IR/DebugInfo.h index 2762086b6e9..97f90ae30f4 100644 --- a/include/llvm/IR/DebugInfo.h +++ b/include/llvm/IR/DebugInfo.h @@ -52,7 +52,6 @@ class DILexicalBlock; class DILexicalBlockFile; class DIVariable; class DIType; -class DIScope; class DIObjCProperty; /// \brief Maps from type identifier to the actual MDNode. @@ -64,7 +63,6 @@ typedef DenseMap DITypeIdentifierMap; template <> struct simplify_type; DECLARE_SIMPLIFY_DESCRIPTOR(DISubrange) DECLARE_SIMPLIFY_DESCRIPTOR(DIEnumerator) -DECLARE_SIMPLIFY_DESCRIPTOR(DIScope) DECLARE_SIMPLIFY_DESCRIPTOR(DIType) DECLARE_SIMPLIFY_DESCRIPTOR(DIBasicType) DECLARE_SIMPLIFY_DESCRIPTOR(DIDerivedType) @@ -112,24 +110,12 @@ public: MDEnumerator &operator*() const { return *N; } }; -class DIScope { - MDScope *N; - -public: - DIScope(const MDScope *N = nullptr) : N(const_cast(N)) {} - - operator MDScope *() const { return N; } - MDScope *operator->() const { return N; } - MDScope &operator*() const { return *N; } -}; - class DIType { MDType *N; public: DIType(const MDType *N = nullptr) : N(const_cast(N)) {} - operator DIScope() const { return N; } operator MDType *() const { return N; } MDType *operator->() const { return N; } MDType &operator*() const { return *N; } @@ -194,7 +180,6 @@ class DIFile { public: DIFile(const MDFile *N = nullptr) : N(const_cast(N)) {} - operator DIScope() const { return N; } operator MDFile *() const { return N; } MDFile *operator->() const { return N; } MDFile &operator*() const { return *N; } @@ -207,7 +192,6 @@ public: DICompileUnit(const MDCompileUnit *N = nullptr) : N(const_cast(N)) {} - operator DIScope() const { return N; } operator MDCompileUnit *() const { return N; } MDCompileUnit *operator->() const { return N; } MDCompileUnit &operator*() const { return *N; } @@ -220,7 +204,6 @@ public: DISubprogram(const MDSubprogram *N = nullptr) : N(const_cast(N)) {} - operator DIScope() const { return N; } operator MDSubprogram *() const { return N; } MDSubprogram *operator->() const { return N; } MDSubprogram &operator*() const { return *N; } @@ -257,7 +240,6 @@ public: DINameSpace(const MDNamespace *N = nullptr) : N(const_cast(N)) {} - operator DIScope() const { return N; } operator MDNamespace *() const { return N; } MDNamespace *operator->() const { return N; } MDNamespace &operator*() const { return *N; } @@ -366,7 +348,6 @@ public: template <> struct simplify_type : simplify_type {}; SIMPLIFY_DESCRIPTOR(DISubrange) SIMPLIFY_DESCRIPTOR(DIEnumerator) -SIMPLIFY_DESCRIPTOR(DIScope) SIMPLIFY_DESCRIPTOR(DIType) SIMPLIFY_DESCRIPTOR(DIBasicType) SIMPLIFY_DESCRIPTOR(DIDerivedType) diff --git a/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp b/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp index c7e853fa988..0fd25eb1a53 100644 --- a/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp @@ -104,8 +104,8 @@ DIE *DwarfCompileUnit::getOrCreateGlobalVariableDIE(DIGlobalVariable GV) { assert(GV); - DIScope GVContext = GV->getScope(); - DIType GTy = DD->resolve(GV->getType()); + auto *GVContext = GV->getScope(); + auto *GTy = DD->resolve(GV->getType()); // Construct the context before querying for the existence of the DIE in // case such construction creates the DIE. @@ -113,8 +113,7 @@ DIE *DwarfCompileUnit::getOrCreateGlobalVariableDIE(DIGlobalVariable GV) { // Add to map. DIE *VariableDIE = &createAndAddDIE(GV->getTag(), *ContextDIE, GV); - DIScope DeclContext; - + MDScope *DeclContext; if (auto *SDMDecl = GV->getStaticDataMemberDeclaration()) { DeclContext = resolve(SDMDecl->getScope()); assert(SDMDecl->isStaticMember() && "Expected static member decl"); @@ -306,7 +305,7 @@ void DwarfCompileUnit::constructScopeDIE( if (!Scope || !Scope->getScopeNode()) return; - DIScope DS(Scope->getScopeNode()); + auto *DS = Scope->getScopeNode(); assert((Scope->getInlinedAt() || !isa(DS)) && "Only handle inlined subprograms here, use " @@ -419,8 +418,8 @@ void DwarfCompileUnit::attachRangesOrLowHighPC( std::unique_ptr DwarfCompileUnit::constructInlinedScopeDIE(LexicalScope *Scope) { assert(Scope->getScopeNode()); - DIScope DS(Scope->getScopeNode()); - DISubprogram InlinedSP = getDISubprogram(DS); + auto *DS = Scope->getScopeNode(); + auto *InlinedSP = getDISubprogram(DS); // Find the subprogram's DwarfCompileUnit in the SPMap in case the subprogram // was inlined from another compile unit. DIE *OriginDIE = DU->getAbstractSPDies()[InlinedSP]; @@ -708,7 +707,7 @@ void DwarfCompileUnit::emitHeader(bool UseOffsets) { /// addGlobalName - Add a new global name to the compile unit. void DwarfCompileUnit::addGlobalName(StringRef Name, DIE &Die, - DIScope Context) { + const MDScope *Context) { if (includeMinimalInlineScopes()) return; std::string FullName = getParentContextString(Context) + Name.str(); @@ -716,8 +715,8 @@ void DwarfCompileUnit::addGlobalName(StringRef Name, DIE &Die, } /// Add a new global type to the unit. -void DwarfCompileUnit::addGlobalType(DIType Ty, const DIE &Die, - DIScope Context) { +void DwarfCompileUnit::addGlobalType(const MDType *Ty, const DIE &Die, + const MDScope *Context) { if (includeMinimalInlineScopes()) return; std::string FullName = getParentContextString(Context) + Ty->getName().str(); @@ -809,7 +808,7 @@ void DwarfCompileUnit::addExpr(DIELoc &Die, dwarf::Form Form, void DwarfCompileUnit::applySubprogramAttributesToDefinition(DISubprogram SP, DIE &SPDie) { auto *SPDecl = SP->getDeclaration(); - DIScope Context = resolve(SPDecl ? SPDecl->getScope() : SP->getScope()); + auto *Context = resolve(SPDecl ? SPDecl->getScope() : SP->getScope()); applySubprogramAttributes(SP, SPDie, includeMinimalInlineScopes()); addGlobalName(SP->getName(), SPDie, Context); } diff --git a/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h b/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h index 9484bb6f33d..f197d226f9c 100644 --- a/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h +++ b/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h @@ -183,10 +183,11 @@ public: } /// Add a new global name to the compile unit. - void addGlobalName(StringRef Name, DIE &Die, DIScope Context) override; + void addGlobalName(StringRef Name, DIE &Die, const MDScope *Context) override; /// Add a new global type to the compile unit. - void addGlobalType(DIType Ty, const DIE &Die, DIScope Context) override; + void addGlobalType(const MDType *Ty, const DIE &Die, + const MDScope *Context) override; const StringMap &getGlobalNames() const { return GlobalNames; } const StringMap &getGlobalTypes() const { return GlobalTypes; } diff --git a/lib/CodeGen/AsmPrinter/DwarfUnit.cpp b/lib/CodeGen/AsmPrinter/DwarfUnit.cpp index 1dd6b49e48b..fe8be422d4d 100644 --- a/lib/CodeGen/AsmPrinter/DwarfUnit.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfUnit.cpp @@ -772,7 +772,7 @@ void DwarfUnit::addTemplateParams(DIE &Buffer, DIArray TParams) { } /// getOrCreateContextDIE - Get context owner's DIE. -DIE *DwarfUnit::getOrCreateContextDIE(DIScope Context) { +DIE *DwarfUnit::getOrCreateContextDIE(const MDScope *Context) { if (!Context || isa(Context)) return &getUnitDie(); if (auto *T = dyn_cast(Context)) @@ -785,7 +785,7 @@ DIE *DwarfUnit::getOrCreateContextDIE(DIScope Context) { } DIE *DwarfUnit::createTypeDIE(DICompositeType Ty) { - DIScope Context = resolve(Ty->getScope()); + auto *Context = resolve(Ty->getScope()); DIE *ContextDIE = getOrCreateContextDIE(Context); if (DIE *TyDIE = getDIE(Ty)) @@ -817,7 +817,7 @@ DIE *DwarfUnit::getOrCreateTypeDIE(const MDNode *TyNode) { // Construct the context before querying for the existence of the DIE in case // such construction creates the DIE. - DIScope Context = resolve(Ty->getScope()); + auto *Context = resolve(Ty->getScope()); DIE *ContextDIE = getOrCreateContextDIE(Context); assert(ContextDIE); @@ -846,8 +846,8 @@ DIE *DwarfUnit::getOrCreateTypeDIE(const MDNode *TyNode) { return &TyDIE; } -void DwarfUnit::updateAcceleratorTables(DIScope Context, DIType Ty, - const DIE &TyDIE) { +void DwarfUnit::updateAcceleratorTables(const MDScope *Context, + const MDType *Ty, const DIE &TyDIE) { if (!Ty->getName().empty() && !Ty->isForwardDecl()) { bool IsImplementation = 0; if (auto *CT = dyn_cast(Ty)) { @@ -890,7 +890,7 @@ void DwarfUnit::addType(DIE &Entity, DIType Ty, dwarf::Attribute Attribute) { /// it as a string. This is done at the metadata level because DIEs may /// not currently have been added to the parent context and walking the /// DIEs looking for names is more expensive than walking the metadata. -std::string DwarfUnit::getParentContextString(DIScope Context) const { +std::string DwarfUnit::getParentContextString(const MDScope *Context) const { if (!Context) return ""; @@ -899,7 +899,7 @@ std::string DwarfUnit::getParentContextString(DIScope Context) const { return ""; std::string CS; - SmallVector Parents; + SmallVector Parents; while (!isa(Context)) { Parents.push_back(Context); if (Context->getScope()) @@ -912,9 +912,7 @@ std::string DwarfUnit::getParentContextString(DIScope Context) const { // Reverse iterate over our list to go from the outermost construct to the // innermost. - for (SmallVectorImpl::reverse_iterator I = Parents.rbegin(), - E = Parents.rend(); - I != E; ++I) { + for (auto I = Parents.rbegin(), E = Parents.rend(); I != E; ++I) { const MDScope *Ctx = *I; StringRef Name = Ctx->getName(); if (Name.empty() && isa(Ctx)) diff --git a/lib/CodeGen/AsmPrinter/DwarfUnit.h b/lib/CodeGen/AsmPrinter/DwarfUnit.h index 8b43e868784..7b7559fef5d 100644 --- a/lib/CodeGen/AsmPrinter/DwarfUnit.h +++ b/lib/CodeGen/AsmPrinter/DwarfUnit.h @@ -153,13 +153,15 @@ public: /// getParentContextString - Get a string containing the language specific /// context for a global name. - std::string getParentContextString(DIScope Context) const; + std::string getParentContextString(const MDScope *Context) const; /// Add a new global name to the compile unit. - virtual void addGlobalName(StringRef Name, DIE &Die, DIScope Context) {} + virtual void addGlobalName(StringRef Name, DIE &Die, const MDScope *Context) { + } /// Add a new global type to the compile unit. - virtual void addGlobalType(DIType Ty, const DIE &Die, DIScope Context) {} + virtual void addGlobalType(const MDType *Ty, const DIE &Die, + const MDScope *Context) {} /// addAccelNamespace - Add a new name to the namespace accelerator table. void addAccelNamespace(StringRef Name, const DIE &Die); @@ -302,7 +304,7 @@ public: DIE *createTypeDIE(DICompositeType Ty); /// getOrCreateContextDIE - Get context owner's DIE. - DIE *getOrCreateContextDIE(DIScope Context); + DIE *getOrCreateContextDIE(const MDScope *Context); /// constructContainingTypeDIEs - Construct DIEs for types that contain /// vtables. @@ -402,7 +404,8 @@ private: /// If this is a named finished type then include it in the list of types for /// the accelerator tables. - void updateAcceleratorTables(DIScope Context, DIType Ty, const DIE &TyDIE); + void updateAcceleratorTables(const MDScope *Context, const MDType *Ty, + const DIE &TyDIE); virtual bool isDwoUnit() const = 0; };