[Lldb-commits] [lldb] Improve type and namespace lookup using parent chain (PR #108907)
Pavel Labath via lldb-commits
lldb-commits at lists.llvm.org
Thu Sep 19 08:03:02 PDT 2024
================
@@ -374,25 +377,40 @@ void DebugNamesDWARFIndex::GetFullyQualifiedType(
m_fallback.GetFullyQualifiedType(context, callback);
}
+bool DebugNamesDWARFIndex::SameAsEntryATName(
+ llvm::StringRef query_name, const DebugNames::Entry &entry) const {
+ auto maybe_dieoffset = entry.getDIEUnitOffset();
+ if (!maybe_dieoffset)
+ return false;
+
+ // [Optimization] instead of parsing the entry from dwo file, we simply
+ // check if the query_name can point to an entry of the same DIE offset.
+ // This greatly reduced number of dwo file parsed and thus improved the
+ // performance.
+ for (const DebugNames::Entry &query_entry :
+ entry.getNameIndex()->equal_range(query_name)) {
+ auto query_dieoffset = query_entry.getDIEUnitOffset();
+ if (!query_dieoffset)
+ continue;
+
+ if (*query_dieoffset == *maybe_dieoffset) {
+ return true;
+ } else if (*query_dieoffset > *maybe_dieoffset) {
+ // The pool entries of the same name are sequentially cluttered together
+ // so if the query name from `query_name` is after the target entry, this
+ // is definitely not the correct one, we can stop searching.
----------------
labath wrote:
That may be the case for clang, but I don't think anything guarantees that. This sounds like the kind of thing that we could communicate through the augmentation string of the debug_names table though...
I.e. I think we shouldn't do this unconditionally, but only if the producer signals this through the augmentation string. We could possibly even retcon the LLVM0700 string which has been emitted by llvm/clang from the beginning of time (if indeed the output has been sorted the whole time).
We should probably also add some tests/comments/etc. to the producer code to make sure they realize we're relying on that.
https://github.com/llvm/llvm-project/pull/108907
More information about the lldb-commits
mailing list