aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/firrtl/transforms
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala/firrtl/transforms')
-rw-r--r--src/main/scala/firrtl/transforms/DeadCodeElimination.scala5
-rw-r--r--src/main/scala/firrtl/transforms/Dedup.scala46
-rw-r--r--src/main/scala/firrtl/transforms/ManipulateNames.scala18
-rw-r--r--src/main/scala/firrtl/transforms/SimplifyMems.scala10
4 files changed, 66 insertions, 13 deletions
diff --git a/src/main/scala/firrtl/transforms/DeadCodeElimination.scala b/src/main/scala/firrtl/transforms/DeadCodeElimination.scala
index 41ffd2be..a622feb4 100644
--- a/src/main/scala/firrtl/transforms/DeadCodeElimination.scala
+++ b/src/main/scala/firrtl/transforms/DeadCodeElimination.scala
@@ -11,6 +11,7 @@ import firrtl.analyses.InstanceKeyGraph
import firrtl.Mappers._
import firrtl.Utils.{kind, throwInternalError}
import firrtl.MemoizedHash._
+import firrtl.renamemap.MutableRenameMap
import firrtl.backends.experimental.smt.random.DefRandom
import firrtl.options.{Dependency, RegisteredTransform, ShellOption}
@@ -213,7 +214,7 @@ class DeadCodeElimination extends Transform with RegisteredTransform with Depend
instMap: collection.Map[String, String],
deadNodes: collection.Set[LogicNode],
moduleMap: collection.Map[String, DefModule],
- renames: RenameMap,
+ renames: MutableRenameMap,
topName: String,
doTouchExtMods: Set[String]
)(mod: DefModule
@@ -346,7 +347,7 @@ class DeadCodeElimination extends Transform with RegisteredTransform with Depend
val liveNodes = depGraph.reachableFrom(circuitSink) + circuitSink
val deadNodes = depGraph.getVertices -- liveNodes
- val renames = RenameMap()
+ val renames = MutableRenameMap()
renames.setCircuit(c.main)
// As we delete deadCode, we will delete ports from Modules and somtimes complete modules
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 {
diff --git a/src/main/scala/firrtl/transforms/ManipulateNames.scala b/src/main/scala/firrtl/transforms/ManipulateNames.scala
index 4a796e58..3596b7e6 100644
--- a/src/main/scala/firrtl/transforms/ManipulateNames.scala
+++ b/src/main/scala/firrtl/transforms/ManipulateNames.scala
@@ -5,6 +5,7 @@ package firrtl.transforms
import firrtl._
import firrtl.analyses.InstanceKeyGraph
import firrtl.Mappers._
+import firrtl.renamemap.MutableRenameMap
import firrtl.annotations.{
CircuitTarget,
@@ -24,6 +25,7 @@ import scala.collection.mutable
import scala.reflect.ClassTag
/** Base trait for annotations that control the behavior of transforms that sub-class ManipulateNames
+ *
* @see [[ManipulateNamesBlocklistAnnotation]]
* @see [[ManipulateNamesAllowlistAnnotation]]
* @define noteLocalTargets All targets must be local. Name modification in a non-local target (e.g., a node in a
@@ -141,7 +143,7 @@ case class ManipulateNamesAllowlistResultAnnotation[A <: ManipulateNames[_]](
*/
private class RenameDataStructure(
circuit: ir.Circuit,
- val renames: RenameMap,
+ val renames: MutableRenameMap,
val block: Target => Boolean,
val allow: Target => Boolean) {
@@ -399,6 +401,16 @@ abstract class ManipulateNames[A <: ManipulateNames[_]: ClassTag] extends Transf
.map(onStatement(_: ir.Statement, r, moduleTarget))
}
+ @deprecated("Use version that accepts renamemap.MutableRenameMap", "FIRRTL 1.5")
+ def run(
+ c: ir.Circuit,
+ renames: RenameMap,
+ block: Target => Boolean,
+ allow: Target => Boolean
+ ): ir.Circuit =
+ // Cast is safe because RenameMap is sealed trait, MutableRenameMap is only subclass
+ run(c, renames.asInstanceOf[MutableRenameMap], block, allow)
+
/** Manipulate all names in a circuit
*
* @param c an input circuit
@@ -409,7 +421,7 @@ abstract class ManipulateNames[A <: ManipulateNames[_]: ClassTag] extends Transf
*/
def run(
c: ir.Circuit,
- renames: RenameMap,
+ renames: MutableRenameMap,
block: Target => Boolean,
allow: Target => Boolean
): ir.Circuit = {
@@ -485,7 +497,7 @@ abstract class ManipulateNames[A <: ManipulateNames[_]: ClassTag] extends Transf
}
}
- val renames = RenameMap()
+ val renames = MutableRenameMap()
val circuitx = run(state.circuit, renames, block, allow)
val annotationsx = state.annotations.flatMap {
diff --git a/src/main/scala/firrtl/transforms/SimplifyMems.scala b/src/main/scala/firrtl/transforms/SimplifyMems.scala
index 92e19f7e..90c26efc 100644
--- a/src/main/scala/firrtl/transforms/SimplifyMems.scala
+++ b/src/main/scala/firrtl/transforms/SimplifyMems.scala
@@ -10,6 +10,7 @@ import firrtl.options.Dependency
import firrtl.passes._
import firrtl.passes.memlib._
import firrtl.stage.Forms
+import firrtl.renamemap.MutableRenameMap
import scala.collection.mutable
import AnalysisUtils._
@@ -29,7 +30,12 @@ class SimplifyMems extends Transform with DependencyAPIMigration {
case _ => false
}
- def onModule(c: Circuit, renames: RenameMap)(m: DefModule): DefModule = {
+ @deprecated("Use version that accepts renamemap.MutableRenameMap", "FIRRTL 1.5")
+ def onModule(c: Circuit, renames: RenameMap)(m: DefModule): DefModule =
+ // Cast is safe because RenameMap is sealed trait and MutableRenameMap is only subclass
+ onModule(c, renames.asInstanceOf[MutableRenameMap])(m)
+
+ def onModule(c: Circuit, renames: MutableRenameMap)(m: DefModule): DefModule = {
val moduleNS = Namespace(m)
val connects = getConnects(m)
val memAdapters = new mutable.LinkedHashMap[String, DefWire]
@@ -86,7 +92,7 @@ class SimplifyMems extends Transform with DependencyAPIMigration {
override def execute(state: CircuitState): CircuitState = {
val c = state.circuit
- val renames = RenameMap()
+ val renames = MutableRenameMap()
state.copy(circuit = c.map(onModule(c, renames)), renames = Some(renames))
}
}