[Lldb-commits] [PATCH] D110396: [nfc] [lldb] DWZ 01/17: Remove DWARFDIE from DeclContextToFileDIERefMap m_decl_ctx_to_filedieref
Jan Kratochvil via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Fri Sep 24 03:03:53 PDT 2021
jankratochvil created this revision.
jankratochvil added reviewers: labath, clayborg.
jankratochvil added a project: LLDB.
Herald added a subscriber: JDevlieghere.
Herald added a reviewer: shafik.
jankratochvil requested review of this revision.
Replace `DWARFDIE` by `std::pair<SymbolFileDWARF *, DIERef>`. Currently it has the same size but after D96236 <https://reviews.llvm.org/D96236> it would needlessly increase from 16 bytes to 24 bytes affecting performance. This replacement should have no real performance disadvantage.
My question about upstreaming of this patchset. <https://reviews.llvm.org/D96236#3020116>
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D110396
Files:
lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp
lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.h
lldb/unittests/SymbolFile/DWARF/DWARFASTParserClangTests.cpp
Index: lldb/unittests/SymbolFile/DWARF/DWARFASTParserClangTests.cpp
===================================================================
--- lldb/unittests/SymbolFile/DWARF/DWARFASTParserClangTests.cpp
+++ lldb/unittests/SymbolFile/DWARF/DWARFASTParserClangTests.cpp
@@ -26,7 +26,7 @@
std::vector<const clang::DeclContext *> GetDeclContextToDIEMapKeys() {
std::vector<const clang::DeclContext *> keys;
- for (const auto &it : m_decl_ctx_to_die)
+ for (const auto &it : m_decl_ctx_to_filedieref)
keys.push_back(it.first);
return keys;
}
Index: lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.h
===================================================================
--- lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.h
+++ lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.h
@@ -75,8 +75,9 @@
typedef llvm::DenseMap<const DWARFDebugInfoEntry *, clang::DeclContext *>
DIEToDeclContextMap;
- typedef std::multimap<const clang::DeclContext *, const DWARFDIE>
- DeclContextToDIEMap;
+ typedef std::multimap<const clang::DeclContext *,
+ std::pair<SymbolFileDWARF *, DIERef>>
+ DeclContextToFileDIERefMap;
typedef llvm::DenseMap<const DWARFDebugInfoEntry *,
lldb_private::OptionalClangModuleID>
DIEToModuleMap;
@@ -86,7 +87,7 @@
lldb_private::TypeSystemClang &m_ast;
DIEToDeclMap m_die_to_decl;
DIEToDeclContextMap m_die_to_decl_ctx;
- DeclContextToDIEMap m_decl_ctx_to_die;
+ DeclContextToFileDIERefMap m_decl_ctx_to_filedieref;
DIEToModuleMap m_die_to_module;
std::unique_ptr<lldb_private::ClangASTImporter> m_clang_ast_importer_up;
/// @}
Index: lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp
===================================================================
--- lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp
+++ lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp
@@ -58,7 +58,7 @@
using namespace lldb;
using namespace lldb_private;
DWARFASTParserClang::DWARFASTParserClang(TypeSystemClang &ast)
- : m_ast(ast), m_die_to_decl_ctx(), m_decl_ctx_to_die() {}
+ : m_ast(ast), m_die_to_decl_ctx(), m_decl_ctx_to_filedieref() {}
DWARFASTParserClang::~DWARFASTParserClang() = default;
@@ -2099,11 +2099,17 @@
lldb_private::CompilerDeclContext decl_context) {
auto opaque_decl_ctx =
(clang::DeclContext *)decl_context.GetOpaqueDeclContext();
- for (auto it = m_decl_ctx_to_die.find(opaque_decl_ctx);
- it != m_decl_ctx_to_die.end() && it->first == opaque_decl_ctx;
- it = m_decl_ctx_to_die.erase(it))
- for (DWARFDIE decl : it->second.children())
+ for (auto it = m_decl_ctx_to_filedieref.find(opaque_decl_ctx);
+ it != m_decl_ctx_to_filedieref.end() && it->first == opaque_decl_ctx;
+ it = m_decl_ctx_to_filedieref.erase(it)) {
+ // We need to store also SymbolFileDWARF * as we cannot assume
+ // m_ast.GetSymbolFile() is actually a SymbolFileDWARF, it can be
+ // a SymbolFileDWARFDebugMap for Apple binaries.
+ std::pair<SymbolFileDWARF *, DIERef> declpair = it->second;
+ DWARFDIE die = declpair.first->GetDIE(declpair.second);
+ for (DWARFDIE decl : die.children())
GetClangDeclForDIE(decl);
+ }
}
CompilerDecl DWARFASTParserClang::GetDeclForUIDFromDWARF(const DWARFDIE &die) {
@@ -3447,9 +3453,12 @@
void DWARFASTParserClang::LinkDeclContextToDIE(clang::DeclContext *decl_ctx,
const DWARFDIE &die) {
m_die_to_decl_ctx[die.GetDIE()] = decl_ctx;
+ SymbolFileDWARF *sym_file = &die.GetCU()->GetSymbolFileDWARF();
+ DIERef ref = *die.GetDIERef();
// There can be many DIEs for a single decl context
- // m_decl_ctx_to_die[decl_ctx].insert(die.GetDIE());
- m_decl_ctx_to_die.insert(std::make_pair(decl_ctx, die));
+ // m_decl_ctx_to_filedieref[decl_ctx].insert(...);
+ m_decl_ctx_to_filedieref.insert(
+ std::make_pair(decl_ctx, std::make_pair(sym_file, ref)));
}
bool DWARFASTParserClang::CopyUniqueClassMethodTypes(
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D110396.374782.patch
Type: text/x-patch
Size: 4064 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20210924/ff22428f/attachment-0001.bin>
More information about the lldb-commits
mailing list