aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/firrtl/transforms/Dedup.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala/firrtl/transforms/Dedup.scala')
-rw-r--r--src/main/scala/firrtl/transforms/Dedup.scala46
1 files changed, 40 insertions, 6 deletions
diff --git a/src/main/scala/firrtl/transforms/Dedup.scala b/src/main/scala/firrtl/transforms/Dedup.scala
index 2fb98224..373066c8 100644
--- a/src/main/scala/firrtl/transforms/Dedup.scala
+++ b/src/main/scala/firrtl/transforms/Dedup.scala
@@ -13,6 +13,7 @@ import firrtl.Utils.{kind, splitRef, throwInternalError}
import firrtl.annotations.transforms.DupedResult
import firrtl.annotations.TargetToken.{Instance, OfModule}
import firrtl.options.{HasShellOptions, ShellOption}
+import firrtl.renamemap.MutableRenameMap
import logger.LazyLogging
import scala.annotation.tailrec
@@ -123,7 +124,7 @@ class DedupModules extends Transform with DependencyAPIMigration {
): (Circuit, RenameMap, AnnotationSeq) = {
// RenameMap
- val componentRenameMap = RenameMap()
+ val componentRenameMap = MutableRenameMap()
componentRenameMap.setCircuit(c.main)
// Maps module name to corresponding dedup module
@@ -161,12 +162,12 @@ class DedupModules extends Transform with DependencyAPIMigration {
logger.debug(s"[Dedup] $from -> ${to.name}")
ct.module(from).asInstanceOf[CompleteTarget] -> Seq(ct.module(to.name))
}
- val moduleRenameMap = RenameMap()
+ val moduleRenameMap = MutableRenameMap()
moduleRenameMap.recordAll(map)
// Build instanceify renaming map
val instanceGraph = InstanceKeyGraph(c)
- val instanceify = RenameMap()
+ val instanceify = MutableRenameMap()
val moduleName2Index = c.modules
.map(_.name)
.zipWithIndex
@@ -337,6 +338,18 @@ object DedupModules extends LazyLogging {
module.map(onPort).map(onStmt)
}
+ @deprecated("Use version that accepts renamemap.MutableRenameMap", "FIRRTL 1.5")
+ def dedupInstances(
+ top: CircuitTarget,
+ originalModule: String,
+ moduleMap: Map[String, DefModule],
+ name2name: Map[String, String],
+ renameMap: RenameMap
+ ): DefModule =
+ // Cast is safe because RenameMap is sealed trait, MutableRenameMap is only concrete class that
+ // can be instantiated
+ dedupInstances(top, originalModule, moduleMap, name2name, renameMap.asInstanceOf[MutableRenameMap])
+
/** Dedup a module's instances based on dedup map
*
* Will fixes up module if deduped instance's ports are differently named
@@ -353,7 +366,7 @@ object DedupModules extends LazyLogging {
originalModule: String,
moduleMap: Map[String, DefModule],
name2name: Map[String, String],
- renameMap: RenameMap
+ renameMap: MutableRenameMap
): DefModule = {
val module = moduleMap(originalModule)
@@ -481,11 +494,22 @@ object DedupModules extends LazyLogging {
}
val tag2all = hashToNames.map { case (hash, names) => hashToTag(hash) -> names.toSet }
- val tagMap = RenameMap()
+ val tagMap = MutableRenameMap()
moduleNameToTag.foreach { case (name, tag) => tagMap.record(top.module(name), top.module(tag)) }
(tag2all, tagMap)
}
+ @deprecated("Use version that accepts renamemap.MutableRenameMap", "FIRRTL 1.5")
+ def deduplicate(
+ circuit: Circuit,
+ noDedups: Set[String],
+ previousDupResults: Map[String, String],
+ renameMap: RenameMap
+ ): Map[String, DefModule] =
+ // Cast is safe because RenameMap is sealed trait, MutableRenameMap is only concrete class that
+ // can be instantiated
+ deduplicate(circuit, noDedups, previousDupResults, renameMap.asInstanceOf[MutableRenameMap])
+
/** Deduplicate
* @param circuit Circuit
* @param noDedups list of modules to not dedup
@@ -496,7 +520,7 @@ object DedupModules extends LazyLogging {
circuit: Circuit,
noDedups: Set[String],
previousDupResults: Map[String, String],
- renameMap: RenameMap
+ renameMap: MutableRenameMap
): Map[String, DefModule] = {
val (moduleMap, moduleLinearization) = {
@@ -587,10 +611,20 @@ object DedupModules extends LazyLogging {
refs.toIndexedSeq
}
+ @deprecated("Use version that accepts renamemap.MutableRenameMap", "FIRRTL 1.5")
def computeRenameMap(
originalNames: IndexedSeq[ReferenceTarget],
dedupedNames: IndexedSeq[ReferenceTarget],
renameMap: RenameMap
+ ): Unit =
+ // Cast is safe because RenameMap is sealed trait, MutableRenameMap is only concrete class that
+ // can be instantiated
+ computeRenameMap(originalNames, dedupedNames, renameMap.asInstanceOf[MutableRenameMap])
+
+ def computeRenameMap(
+ originalNames: IndexedSeq[ReferenceTarget],
+ dedupedNames: IndexedSeq[ReferenceTarget],
+ renameMap: MutableRenameMap
): Unit = {
originalNames.zip(dedupedNames).foreach {