diff options
author | David Blaikie <dblaikie@gmail.com> | 2014-05-14 17:58:53 +0000 |
---|---|---|
committer | David Blaikie <dblaikie@gmail.com> | 2014-05-14 17:58:53 +0000 |
commit | f662f0a65e6fc4c637b6ecef76d237fa481fa296 (patch) | |
tree | 7f91096e3847747d56a226d21e5028b75680304c /llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp | |
parent | 2a522511535cade4e6470666e0ac1f4e33a903d3 (diff) | |
download | bcm5719-llvm-f662f0a65e6fc4c637b6ecef76d237fa481fa296.tar.gz bcm5719-llvm-f662f0a65e6fc4c637b6ecef76d237fa481fa296.zip |
DebugInfo: Do not delay attaching DW_AT_inline attribute to abstract definitions.
This is just unneccessary - we only create abstract definitions when
we're inlining anyway, so there's no reason to delay this to see if
we're going to inline anything.
llvm-svn: 208798
Diffstat (limited to 'llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp')
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp | 20 |
1 files changed, 5 insertions, 15 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index bbd00eab7f7..0c85c6bcade 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -463,11 +463,13 @@ DwarfDebug::constructInlinedScopeDIE(DwarfCompileUnit &TheCU, assert(!ScopeRanges.empty() && "LexicalScope does not have instruction markers!"); - if (!Scope->getScopeNode()) - return nullptr; + assert(Scope->getScopeNode()); DIScope DS(Scope->getScopeNode()); DISubprogram InlinedSP = getDISubprogram(DS); DIE *OriginDIE = TheCU.getDIE(InlinedSP); + // FIXME: This should be an assert (or possibly a + // getOrCreateSubprogram(InlinedSP)) otherwise we're just failing to emit + // inlining information. if (!OriginDIE) { DEBUG(dbgs() << "Unable to find original DIE for an inlined subprogram."); return nullptr; @@ -582,6 +584,7 @@ void DwarfDebug::constructAbstractSubprogramScopeDIE(DwarfCompileUnit &TheCU, if (DIE *ScopeDIE = TheCU.getDIE(Sub)) { AbstractSPDies.insert(std::make_pair(Sub, ScopeDIE)); + TheCU.addUInt(*ScopeDIE, dwarf::DW_AT_inline, None, dwarf::DW_INL_inlined); createAndAddScopeChildren(TheCU, Scope, *ScopeDIE); } } @@ -856,16 +859,6 @@ void DwarfDebug::beginModule() { SectionMap[Asm->getObjFileLowering().getTextSection()]; } -// Attach DW_AT_inline attribute with inlined subprogram DIEs. -void DwarfDebug::computeInlinedDIEs() { - for (const auto &AI : AbstractSPDies) { - DIE &ISP = *AI.second; - if (InlinedSubprogramDIEs.count(&ISP)) - continue; - FirstCU->addUInt(ISP, dwarf::DW_AT_inline, None, dwarf::DW_INL_inlined); - } -} - // Collect info for variables that were optimized out. void DwarfDebug::collectDeadVariables() { const Module *M = MMI->getModule(); @@ -910,9 +903,6 @@ void DwarfDebug::finalizeModuleInfo() { // Collect info for variables that were optimized out. collectDeadVariables(); - // Attach DW_AT_inline attribute with inlined subprogram DIEs. - computeInlinedDIEs(); - // Handle anything that needs to be done on a per-unit basis after // all other generation. for (const auto &TheU : getUnits()) { |