DebugInfo: Sink constructImportedEntityDIE down into DwarfUnit from DwarfDebug.

It was just calling a bunch of DwarfUnit functions anyway, as can be
seen by the simplification of removing "TheCU" from all the function
calls in the implementation.

llvm-svn: 219103
This commit is contained in:
David Blaikie 2014-10-06 05:37:24 +00:00
parent 64ee99183b
commit febfafd13a
4 changed files with 34 additions and 36 deletions

View File

@ -595,7 +595,7 @@ void DwarfDebug::constructScopeDIE(
for (ImportedEntityMap::const_iterator i = Range.first; i != Range.second;
++i)
Children.push_back(
constructImportedEntityDIE(TheCU, DIImportedEntity(i->second)));
TheCU.constructImportedEntityDIE(DIImportedEntity(i->second)));
// If there are only other scopes as children, put them directly in the
// parent instead, as this scope would serve no purpose.
if (Children.size() == ChildScopeCount) {
@ -690,36 +690,7 @@ void DwarfDebug::constructAndAddImportedEntityDIE(DwarfCompileUnit &TheCU,
DIImportedEntity Module(N);
assert(Module.Verify());
if (DIE *D = TheCU.getOrCreateContextDIE(Module.getContext()))
D->addChild(constructImportedEntityDIE(TheCU, Module));
}
std::unique_ptr<DIE>
DwarfDebug::constructImportedEntityDIE(DwarfCompileUnit &TheCU,
const DIImportedEntity &Module) {
assert(Module.Verify() &&
"Use one of the MDNode * overloads to handle invalid metadata");
std::unique_ptr<DIE> IMDie = make_unique<DIE>((dwarf::Tag)Module.getTag());
TheCU.insertDIE(Module, IMDie.get());
DIE *EntityDie;
DIDescriptor Entity = resolve(Module.getEntity());
if (Entity.isNameSpace())
EntityDie = TheCU.getOrCreateNameSpace(DINameSpace(Entity));
else if (Entity.isSubprogram())
EntityDie = TheCU.getOrCreateSubprogramDIE(DISubprogram(Entity));
else if (Entity.isType())
EntityDie = TheCU.getOrCreateTypeDIE(DIType(Entity));
else
EntityDie = TheCU.getDIE(Entity);
assert(EntityDie);
TheCU.addSourceLine(*IMDie, Module.getLineNumber(),
Module.getContext().getFilename(),
Module.getContext().getDirectory());
TheCU.addDIEEntry(*IMDie, dwarf::DW_AT_import, *EntityDie);
StringRef Name = Module.getName();
if (!Name.empty())
TheCU.addString(*IMDie, dwarf::DW_AT_name, Name);
return IMDie;
D->addChild(TheCU.constructImportedEntityDIE(Module));
}
// Emit all Dwarf sections that should come prior to the content. Create

View File

@ -508,11 +508,6 @@ class DwarfDebug : public AsmPrinterHandler {
void constructAndAddImportedEntityDIE(DwarfCompileUnit &TheCU,
const MDNode *N);
/// \brief Construct import_module DIE.
std::unique_ptr<DIE>
constructImportedEntityDIE(DwarfCompileUnit &TheCU,
const DIImportedEntity &Module);
/// \brief Register a source line with debug info. Returns the unique
/// label that was emitted and which provides correspondence to the
/// source line list.

View File

@ -1139,6 +1139,34 @@ void DwarfUnit::constructSubprogramArguments(DIE &Buffer, DITypeArray Args) {
}
}
std::unique_ptr<DIE>
DwarfUnit::constructImportedEntityDIE(const DIImportedEntity &Module) {
assert(Module.Verify() &&
"Use one of the MDNode * overloads to handle invalid metadata");
std::unique_ptr<DIE> IMDie = make_unique<DIE>((dwarf::Tag)Module.getTag());
insertDIE(Module, IMDie.get());
DIE *EntityDie;
DIDescriptor Entity = resolve(Module.getEntity());
if (Entity.isNameSpace())
EntityDie = getOrCreateNameSpace(DINameSpace(Entity));
else if (Entity.isSubprogram())
EntityDie = getOrCreateSubprogramDIE(DISubprogram(Entity));
else if (Entity.isType())
EntityDie = getOrCreateTypeDIE(DIType(Entity));
else
EntityDie = getDIE(Entity);
assert(EntityDie);
addSourceLine(*IMDie, Module.getLineNumber(),
Module.getContext().getFilename(),
Module.getContext().getDirectory());
addDIEEntry(*IMDie, dwarf::DW_AT_import, *EntityDie);
StringRef Name = Module.getName();
if (!Name.empty())
addString(*IMDie, dwarf::DW_AT_name, Name);
return IMDie;
}
/// constructTypeDIE - Construct type DIE from DICompositeType.
void DwarfUnit::constructTypeDIE(DIE &Buffer, DICompositeType CTy) {
// Add name if not anonymous or intermediate type.

View File

@ -424,6 +424,10 @@ public:
/// constructSubprogramArguments - Construct function argument DIEs.
void constructSubprogramArguments(DIE &Buffer, DITypeArray Args);
/// \brief Construct import_module DIE.
std::unique_ptr<DIE>
constructImportedEntityDIE(const DIImportedEntity &Module);
/// Create a DIE with the given Tag, add the DIE to its parent, and
/// call insertDIE if MD is not null.
DIE &createAndAddDIE(unsigned Tag, DIE &Parent,