|
28 | 28 | USING_YOSYS_NAMESPACE |
29 | 29 | PRIVATE_NAMESPACE_BEGIN |
30 | 30 |
|
31 | | -using SnippetSourceMap = dict<std::pair<int, const RTLIL::CaseRule*>, const Const*>; |
| 31 | +using SnippetSourceMap = std::vector<dict<const RTLIL::CaseRule*, const Const*>>; |
32 | 32 | struct SnippetSourceMapBuilder { |
33 | 33 | SnippetSourceMap map; |
34 | 34 | void insert(int snippet, const RTLIL::CaseRule* cs, const RTLIL::SyncAction& action) { |
| 35 | + map.resize(snippet + 1); |
35 | 36 | if (action.src.size()) |
36 | | - map[std::make_pair(snippet, cs)] = &action.src; |
| 37 | + map[snippet][cs] = &action.src; |
37 | 38 | } |
38 | 39 |
|
39 | 40 | }; |
40 | 41 | struct SnippetSourceMapper { |
41 | 42 | const SnippetSourceMap map; |
42 | 43 | void try_map_into(pool<std::string>& sources, int snippet, const RTLIL::CaseRule* cs) const { |
43 | | - auto src_it = map.find(std::make_pair(snippet, cs)); |
44 | | - if (src_it != map.end()) { |
45 | | - sources.insert(src_it->second->decode_string()); |
46 | | - } else { |
47 | | - auto cs_src = cs->get_src_attribute(); |
48 | | - if (cs_src.size()) { |
49 | | - sources.insert(cs_src); |
| 44 | + if ((size_t)snippet < map.size()) { |
| 45 | + const auto& snippet_map = map[snippet]; |
| 46 | + auto src_it = snippet_map.find(cs); |
| 47 | + if (src_it != snippet_map.end()) { |
| 48 | + sources.insert(src_it->second->decode_string()); |
| 49 | + return; |
50 | 50 | } |
51 | 51 | } |
| 52 | + auto cs_src = cs->get_src_attribute(); |
| 53 | + if (cs_src.size()) { |
| 54 | + sources.insert(cs_src); |
| 55 | + } |
52 | 56 | } |
53 | 57 |
|
54 | 58 | }; |
|
0 commit comments