diff options
| author | Schuyler Eldridge | 2020-02-12 16:19:54 -0500 |
|---|---|---|
| committer | Schuyler Eldridge | 2020-02-12 19:54:40 -0500 |
| commit | 6426b4afe6ef57797340b235c774baec05862869 (patch) | |
| tree | 2586ff1cc908402579199f951588b805d05b61c5 /src | |
| parent | eabc38559b7634ff7147aa0ab3d71e78558d5162 (diff) | |
Record self-renames in RenameMap, distinct renames
Change the behavior of RenameMap.completeTarget so that self-renames
do not silently *not* happen. Previously, requests to self-rename
would be ignored unless they were packaged in a sequences of renames
that included a self-rename.
Change renames to be recorded distinctly so that multiple requests to
rename to the same thing will now deduplicate. Previously, these
renames would be recorded multiple times. This change was required
because allowing self-renames exposed a bug in InferWidthsAnnosSpec
due to multiple renames.
These changes benefit the situation where you rightly want to do a
self-rename. Namely, when doing module duplication (with the
EliminateTargetPaths transform).
Signed-off-by: Schuyler Eldridge <schuyler.eldridge@ibm.com>
Do not record the same rename multiple times
Signed-off-by: Schuyler Eldridge <schuyler.eldridge@ibm.com>
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/scala/firrtl/RenameMap.scala | 22 |
1 files changed, 9 insertions, 13 deletions
diff --git a/src/main/scala/firrtl/RenameMap.scala b/src/main/scala/firrtl/RenameMap.scala index 03f01991..ffb7acc2 100644 --- a/src/main/scala/firrtl/RenameMap.scala +++ b/src/main/scala/firrtl/RenameMap.scala @@ -484,19 +484,15 @@ final class RenameMap private (val underlying: mutable.HashMap[CompleteTarget, S * @param tos */ private def completeRename(from: CompleteTarget, tos: Seq[CompleteTarget]): Unit = { - (from, tos) match { - case (x, Seq(y)) if x == y => - case _ => - tos.foreach{recordSensitivity(from, _)} - val existing = underlying.getOrElse(from, Vector.empty) - val updated = existing ++ tos - underlying(from) = updated - getCache.clear() - traverseTokensCache.clear() - traverseHierarchyCache.clear() - traverseLeftCache.clear() - traverseRightCache.clear() - } + tos.foreach{recordSensitivity(from, _)} + val existing = underlying.getOrElse(from, Vector.empty) + val updated = (existing ++ tos).distinct + underlying(from) = updated + getCache.clear() + traverseTokensCache.clear() + traverseHierarchyCache.clear() + traverseLeftCache.clear() + traverseRightCache.clear() } /* DEPRECATED ACCESSOR/SETTOR METHODS WITH [[firrtl.ir.Named Named]] */ |
