Author: Alex Langford Date: 2026-07-10T10:52:17-07:00 New Revision: 340bd05d5f3c5dbd8bb49618aaaf39188cd2014b
URL: https://github.com/llvm/llvm-project/commit/340bd05d5f3c5dbd8bb49618aaaf39188cd2014b DIFF: https://github.com/llvm/llvm-project/commit/340bd05d5f3c5dbd8bb49618aaaf39188cd2014b.diff LOG: [lldb] Simplify creating RegisterSets in DynamicRegisterInfo (#208592) `DynamicRegisterInfo::GetRegisterSetIndexByName` is only used in `DynamicRegisterInfo::SetRegisterInfo` so I inlined it and removed the function. I also noticed that `m_set_names` is only used in this function for setup, so I made it a local variable instead of a member. Added: Modified: lldb/include/lldb/Target/DynamicRegisterInfo.h lldb/source/Target/DynamicRegisterInfo.cpp Removed: ################################################################################ diff --git a/lldb/include/lldb/Target/DynamicRegisterInfo.h b/lldb/include/lldb/Target/DynamicRegisterInfo.h index ada40ce1b90bb..b5ce07d9d61e0 100644 --- a/lldb/include/lldb/Target/DynamicRegisterInfo.h +++ b/lldb/include/lldb/Target/DynamicRegisterInfo.h @@ -71,9 +71,6 @@ class DynamicRegisterInfo { const lldb_private::RegisterSet *GetRegisterSet(uint32_t i) const; - uint32_t GetRegisterSetIndexByName(const lldb_private::ConstString &set_name, - bool can_create); - uint32_t ConvertRegisterKindToRegisterNumber(uint32_t kind, uint32_t num) const; @@ -105,7 +102,6 @@ class DynamicRegisterInfo { typedef std::vector<lldb_private::RegisterSet> set_collection; typedef std::vector<uint32_t> reg_num_collection; typedef std::vector<reg_num_collection> set_reg_num_collection; - typedef std::vector<lldb_private::ConstString> name_collection; typedef std::map<uint32_t, reg_num_collection> reg_to_regs_map; typedef std::map<uint32_t, uint32_t> reg_offset_map; @@ -126,7 +122,6 @@ class DynamicRegisterInfo { reg_collection m_regs; set_collection m_sets; set_reg_num_collection m_set_reg_nums; - name_collection m_set_names; reg_to_regs_map m_value_regs_map; reg_to_regs_map m_invalidate_regs_map; reg_offset_map m_value_reg_offset_map; diff --git a/lldb/source/Target/DynamicRegisterInfo.cpp b/lldb/source/Target/DynamicRegisterInfo.cpp index 3cf89ec488f8b..5fde415dd54c7 100644 --- a/lldb/source/Target/DynamicRegisterInfo.cpp +++ b/lldb/source/Target/DynamicRegisterInfo.cpp @@ -47,7 +47,6 @@ void DynamicRegisterInfo::MoveFrom(DynamicRegisterInfo &&info) { m_regs = std::move(info.m_regs); m_sets = std::move(info.m_sets); m_set_reg_nums = std::move(info.m_set_reg_nums); - m_set_names = std::move(info.m_set_names); m_value_regs_map = std::move(info.m_value_regs_map); m_invalidate_regs_map = std::move(info.m_invalidate_regs_map); @@ -396,6 +395,9 @@ size_t DynamicRegisterInfo::SetRegisterInfo( const ArchSpec &arch) { assert(!m_finalized); + llvm::StringMap<uint32_t> set_name_to_idx; + uint32_t next_idx = 0; + for (auto it : llvm::enumerate(regs)) { uint32_t local_regnum = it.index(); const DynamicRegisterInfo::Register ® = it.value(); @@ -428,12 +430,22 @@ size_t DynamicRegisterInfo::SetRegisterInfo( m_regs.push_back(reg_info); - uint32_t set = GetRegisterSetIndexByName(reg.set_name, true); - assert(set < m_sets.size()); - assert(set < m_set_reg_nums.size()); - assert(set < m_set_names.size()); - m_set_reg_nums[set].push_back(local_regnum); - }; + uint32_t set_idx; + if (!set_name_to_idx.contains(reg.set_name)) { + set_idx = next_idx; + + set_name_to_idx.insert({reg.set_name, next_idx++}); + m_set_reg_nums.resize(m_set_reg_nums.size() + 1); + RegisterSet new_set = {reg.set_name.GetCString(), nullptr, 0, nullptr}; + m_sets.push_back(new_set); + } else { + set_idx = set_name_to_idx.lookup(reg.set_name); + } + + assert(set_idx < m_sets.size()); + assert(set_idx < m_set_reg_nums.size()); + m_set_reg_nums[set_idx].push_back(local_regnum); + } Finalize(arch); return m_regs.size(); @@ -710,22 +722,6 @@ const RegisterSet *DynamicRegisterInfo::GetRegisterSet(uint32_t i) const { return nullptr; } -uint32_t -DynamicRegisterInfo::GetRegisterSetIndexByName(const ConstString &set_name, - bool can_create) { - name_collection::iterator pos, end = m_set_names.end(); - for (pos = m_set_names.begin(); pos != end; ++pos) { - if (*pos == set_name) - return std::distance(m_set_names.begin(), pos); - } - - m_set_names.push_back(set_name); - m_set_reg_nums.resize(m_set_reg_nums.size() + 1); - RegisterSet new_set = {set_name.AsCString(nullptr), nullptr, 0, nullptr}; - m_sets.push_back(new_set); - return m_sets.size() - 1; -} - uint32_t DynamicRegisterInfo::ConvertRegisterKindToRegisterNumber(uint32_t kind, uint32_t num) const { @@ -742,7 +738,6 @@ void DynamicRegisterInfo::Clear() { m_regs.clear(); m_sets.clear(); m_set_reg_nums.clear(); - m_set_names.clear(); m_value_regs_map.clear(); m_invalidate_regs_map.clear(); m_reg_data_byte_size = 0; _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
