From e5ef56f1e8f9b3bce31ffbe4556d25255ab18838 Mon Sep 17 00:00:00 2001 From: "Emil J. Tywoniak" Date: Sat, 15 Nov 2025 01:04:30 +0100 Subject: [PATCH] proc_mux: optimize source map locality for index density (cherry picked from commit b3aea1b5d23ea16f2560953d4f9dc55450e61509) --- passes/proc/proc_mux.cc | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/passes/proc/proc_mux.cc b/passes/proc/proc_mux.cc index 572b14005..6a297826c 100644 --- a/passes/proc/proc_mux.cc +++ b/passes/proc/proc_mux.cc @@ -28,27 +28,31 @@ USING_YOSYS_NAMESPACE PRIVATE_NAMESPACE_BEGIN -using SnippetSourceMap = dict, TwineRef>; +using SnippetSourceMap = std::vector>; struct SnippetSourceMapBuilder { SnippetSourceMap map; void insert(int snippet, const RTLIL::CaseRule* cs, const RTLIL::SyncAction& action) { + map.resize(std::max(map.size(), (size_t)snippet + 1)); if (action.src != Twine::Null) - map[std::make_pair(snippet, cs)] = action.src; + map[snippet][cs] = action.src; } }; struct SnippetSourceMapper { const SnippetSourceMap map; void try_map_into(pool& sources, int snippet, const RTLIL::CaseRule* cs) const { - auto src_it = map.find(std::make_pair(snippet, cs)); - if (src_it != map.end()) { - sources.insert(src_it->second); - } else { - TwineRef cs_src = cs->src_id(); - if (cs_src != Twine::Null) { - sources.insert(cs_src); + if ((size_t)snippet < map.size()) { + const auto& snippet_map = map[snippet]; + auto src_it = snippet_map.find(cs); + if (src_it != snippet_map.end()) { + sources.insert(src_it->second); + return; } } + TwineRef cs_src = cs->src_id(); + if (cs_src != Twine::Null) { + sources.insert(cs_src); + } } };