diff options
| author | mergify[bot] | 2022-11-29 17:24:38 +0000 |
|---|---|---|
| committer | GitHub | 2022-11-29 17:24:38 +0000 |
| commit | c21f31d09f2511497cea5cb03bd6ddba440c55fe (patch) | |
| tree | d138387b49fe6d55bcc3398b88951d758666809e /docs-target/src | |
| parent | b169f6db95f9778cf8968cc1042b7f810f9d8123 (diff) | |
Implement compressed Namespace (backport #2856) (#2860)
* Implement compressed Namespace (#2856)
The namespace disambiguates requests for the same name with _<idx>.
Rather than storing every disambiguated name in the underlying HashMap,
it now only stores the base along with the "next available" index. This
makes the logic for checking if a name is already contained in the
namespace slightly more sophisticated because users can name things in a
way that will collide with disambiguated names from a common substring.
For example, in naming the sequence "foo", "foo", "foo_1", the 2nd "foo"
takes the name "foo_1" so the following "foo_1" gets disambiguated to
"foo_1_1". But since we compressed that original "foo_1" into the same
HashMap entry as just "foo", we have to do a form of "prefix checking"
whenever naming something that ends in "_<idx>".
In practice, the saved memory allocations more than make up for the more
complicated logic to disambiguate names because the common case is still
fast.
(cherry picked from commit 1654d87a02ca799bf12805a611a91e7524d49843)
# Conflicts:
# core/src/main/scala/chisel3/internal/Builder.scala
* Resolve backport conflicts
Co-authored-by: Jack Koenig <koenig@sifive.com>
Diffstat (limited to 'docs-target/src')
0 files changed, 0 insertions, 0 deletions
