From 1a2786b90015c04d5b38f51d90dbb6e93fa772d6 Mon Sep 17 00:00:00 2001 From: Adrian Prantl Date: Tue, 1 Apr 2014 03:41:04 +0000 Subject: [PATCH] LTO type uniquing: store the Decl field of a DIImportedEntity as a DIRef. No other functionality changes, DIBuilder testcase is included in a paired CFE commit. This relaxes the assertion in isScopeRef to also accept subclasses of DIScope. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@205279 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/IR/DIBuilder.h | 2 +- include/llvm/IR/DebugInfo.h | 2 +- lib/CodeGen/AsmPrinter/DwarfDebug.cpp | 2 +- lib/IR/DIBuilder.cpp | 4 ++-- lib/IR/DebugInfo.cpp | 4 ++-- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/include/llvm/IR/DIBuilder.h b/include/llvm/IR/DIBuilder.h index 40fa0950cd7..7d87a69de0e 100644 --- a/include/llvm/IR/DIBuilder.h +++ b/include/llvm/IR/DIBuilder.h @@ -663,7 +663,7 @@ namespace llvm { /// variable /// @param Line Line number DIImportedEntity createImportedDeclaration(DIScope Context, - DIDescriptor Decl, + DIScope Decl, unsigned Line); /// insertDeclare - Insert a new llvm.dbg.declare intrinsic call. diff --git a/include/llvm/IR/DebugInfo.h b/include/llvm/IR/DebugInfo.h index f2f935ae097..228df49793d 100644 --- a/include/llvm/IR/DebugInfo.h +++ b/include/llvm/IR/DebugInfo.h @@ -783,7 +783,7 @@ class DIImportedEntity : public DIDescriptor { public: explicit DIImportedEntity(const MDNode *N) : DIDescriptor(N) {} DIScope getContext() const { return getFieldAs(1); } - DIDescriptor getEntity() const { return getFieldAs(2); } + DIScopeRef getEntity() const { return getFieldAs(2); } unsigned getLineNumber() const { return getUnsignedField(3); } StringRef getName() const { return getStringField(4); } bool Verify() const; diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index f4182d0b79b..a21fa673118 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -794,7 +794,7 @@ void DwarfDebug::constructImportedEntityDIE(DwarfCompileUnit *TheCU, DIE *IMDie = new DIE(Module.getTag()); TheCU->insertDIE(Module, IMDie); DIE *EntityDie; - DIDescriptor Entity = Module.getEntity(); + DIDescriptor Entity = resolve(Module.getEntity()); if (Entity.isNameSpace()) EntityDie = TheCU->getOrCreateNameSpace(DINameSpace(Entity)); else if (Entity.isSubprogram()) diff --git a/lib/IR/DIBuilder.cpp b/lib/IR/DIBuilder.cpp index 8f3d979712a..1ea381a454c 100644 --- a/lib/IR/DIBuilder.cpp +++ b/lib/IR/DIBuilder.cpp @@ -190,12 +190,12 @@ DIImportedEntity DIBuilder::createImportedModule(DIScope Context, } DIImportedEntity DIBuilder::createImportedDeclaration(DIScope Context, - DIDescriptor Decl, + DIScope Decl, unsigned Line) { Value *Elts[] = { GetTagConstant(VMContext, dwarf::DW_TAG_imported_declaration), Context, - Decl, + Decl.getRef(), ConstantInt::get(Type::getInt32Ty(VMContext), Line), }; DIImportedEntity M(MDNode::get(VMContext, Elts)); diff --git a/lib/IR/DebugInfo.cpp b/lib/IR/DebugInfo.cpp index 9d708c6fce0..f9bc63b389e 100644 --- a/lib/IR/DebugInfo.cpp +++ b/lib/IR/DebugInfo.cpp @@ -430,7 +430,7 @@ static bool fieldIsTypeRef(const MDNode *DbgNode, unsigned Elt) { static bool isScopeRef(const Value *Val) { return !Val || (isa(Val) && !cast(Val)->getString().empty()) || - (isa(Val) && DIScope(cast(Val)).isScope()); + isa(Val); } /// Check if a field at position Elt of a MDNode can be a ScopeRef. @@ -1016,7 +1016,7 @@ void DebugInfoFinder::processModule(const Module &M) { DIArray Imports = CU.getImportedEntities(); for (unsigned i = 0, e = Imports.getNumElements(); i != e; ++i) { DIImportedEntity Import = DIImportedEntity(Imports.getElement(i)); - DIDescriptor Entity = Import.getEntity(); + DIDescriptor Entity = Import.getEntity().resolve(TypeIdentifierMap); if (Entity.isType()) processType(DIType(Entity)); else if (Entity.isSubprogram())