[Lldb-commits] [lldb] [lldb][NFC] Use DenseMap for ISAToDescriptorMap in ObjCLanguageRuntime (PR #197443)
Felipe de Azevedo Piovezan via lldb-commits
lldb-commits at lists.llvm.org
Wed May 13 06:30:08 PDT 2026
https://github.com/felipepiovezan created https://github.com/llvm/llvm-project/pull/197443
This datastruct maps addr_t's to shared_pointers, which is a good case for a DenseMap. The tree allocation functions were showing up in Instrument traces when evaluating frame variable commands.
In a benchmark evaluating `v self` in a SwiftUI object, this brought down the number of CPU cycles from 578M to 487M.
>From 2c2f91785cdbb7fb7a4ccb3c11c73bee83ba22b8 Mon Sep 17 00:00:00 2001
From: Felipe de Azevedo Piovezan <fpiovezan at apple.com>
Date: Wed, 13 May 2026 09:55:33 +0100
Subject: [PATCH] [lldb][NFC] Use DenseMap for ISAToDescriptorMap in
ObjCLanguageRuntime
This datastruct maps addr_t's to shared_pointers, which is a good case
for a DenseMap. The tree allocation functions were showing up in
Instrument traces when evaluating frame variable commands.
In a benchmark evaluating `v self` in a SwiftUI object, this brought
down the number of CPU cycles from 578M to 487M.
---
.../Plugins/LanguageRuntime/ObjC/ObjCLanguageRuntime.h | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/lldb/source/Plugins/LanguageRuntime/ObjC/ObjCLanguageRuntime.h b/lldb/source/Plugins/LanguageRuntime/ObjC/ObjCLanguageRuntime.h
index 4ac49a82b82d5..74ac557906d41 100644
--- a/lldb/source/Plugins/LanguageRuntime/ObjC/ObjCLanguageRuntime.h
+++ b/lldb/source/Plugins/LanguageRuntime/ObjC/ObjCLanguageRuntime.h
@@ -340,7 +340,7 @@ class ObjCLanguageRuntime : public LanguageRuntime {
bool AddClass(ObjCISA isa, const ClassDescriptorSP &descriptor_sp) {
if (isa != 0) {
- m_isa_to_descriptor[isa] = descriptor_sp;
+ m_isa_to_descriptor.insert_or_assign(isa, descriptor_sp);
return true;
}
return false;
@@ -352,7 +352,7 @@ class ObjCLanguageRuntime : public LanguageRuntime {
bool AddClass(ObjCISA isa, const ClassDescriptorSP &descriptor_sp,
uint32_t class_name_hash) {
if (isa != 0) {
- m_isa_to_descriptor[isa] = descriptor_sp;
+ m_isa_to_descriptor.insert_or_assign(isa, descriptor_sp);
m_hash_to_isa_map.insert(std::make_pair(class_name_hash, isa));
return true;
}
@@ -419,7 +419,7 @@ class ObjCLanguageRuntime : public LanguageRuntime {
typedef std::map<ClassAndSel, lldb::addr_t> MsgImplMap;
typedef std::map<ClassAndSelStr, lldb::addr_t> MsgImplStrMap;
- typedef std::map<ObjCISA, ClassDescriptorSP> ISAToDescriptorMap;
+ typedef llvm::DenseMap<ObjCISA, ClassDescriptorSP> ISAToDescriptorMap;
typedef std::multimap<uint32_t, ObjCISA> HashToISAMap;
typedef ISAToDescriptorMap::iterator ISAToDescriptorIterator;
typedef HashToISAMap::iterator HashToISAIterator;
More information about the lldb-commits
mailing list