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/ConstantPropagation.scala2
-rw-r--r--src/main/scala/firrtl/transforms/DeadCodeElimination.scala2
-rw-r--r--src/main/scala/firrtl/transforms/Dedup.scala4
-rw-r--r--src/main/scala/firrtl/transforms/FlattenRegUpdate.scala2
-rw-r--r--src/main/scala/firrtl/transforms/GroupComponents.scala6
-rw-r--r--src/main/scala/firrtl/transforms/InferResets.scala4
-rw-r--r--src/main/scala/firrtl/transforms/ManipulateNames.scala24
-rw-r--r--src/main/scala/firrtl/transforms/PropagatePresetAnnotations.scala17
-rw-r--r--src/main/scala/firrtl/transforms/RemoveWires.scala4
9 files changed, 34 insertions, 31 deletions
diff --git a/src/main/scala/firrtl/transforms/ConstantPropagation.scala b/src/main/scala/firrtl/transforms/ConstantPropagation.scala
index 0ec4fe0b..c3c615e0 100644
--- a/src/main/scala/firrtl/transforms/ConstantPropagation.scala
+++ b/src/main/scala/firrtl/transforms/ConstantPropagation.scala
@@ -819,7 +819,7 @@ class ConstantPropagation extends Transform with DependencyAPIMigration with Res
}
// Map from module name to component names
val dontTouchMap: Map[OfModule, Set[String]] =
- dontTouches.groupBy(_._1).mapValues(_.map(_._2).toSet)
+ dontTouches.groupBy(_._1).mapValues(_.map(_._2).toSet).toMap
state.copy(circuit = run(state.circuit, dontTouchMap))
}
diff --git a/src/main/scala/firrtl/transforms/DeadCodeElimination.scala b/src/main/scala/firrtl/transforms/DeadCodeElimination.scala
index 4182e496..f9e35818 100644
--- a/src/main/scala/firrtl/transforms/DeadCodeElimination.scala
+++ b/src/main/scala/firrtl/transforms/DeadCodeElimination.scala
@@ -94,7 +94,7 @@ class DeadCodeElimination extends Transform
e
}
rec(expr)
- refs
+ refs.toSeq
}
// Gets all dependencies and constructs LogicNodes from them
diff --git a/src/main/scala/firrtl/transforms/Dedup.scala b/src/main/scala/firrtl/transforms/Dedup.scala
index 03b5faa9..30558129 100644
--- a/src/main/scala/firrtl/transforms/Dedup.scala
+++ b/src/main/scala/firrtl/transforms/Dedup.scala
@@ -550,7 +550,7 @@ object DedupModules extends LazyLogging {
}
changeInternals(rename, retype, {i => i}, {(x, y) => x}, renameExps = false)(m)
- refs
+ refs.toIndexedSeq
}
def computeRenameMap(originalNames: IndexedSeq[ReferenceTarget],
@@ -578,6 +578,6 @@ object DedupModules extends LazyLogging {
}
onExp(root)
- all
+ all.toSeq
}
}
diff --git a/src/main/scala/firrtl/transforms/FlattenRegUpdate.scala b/src/main/scala/firrtl/transforms/FlattenRegUpdate.scala
index 4bda25ce..b272f134 100644
--- a/src/main/scala/firrtl/transforms/FlattenRegUpdate.scala
+++ b/src/main/scala/firrtl/transforms/FlattenRegUpdate.scala
@@ -107,7 +107,7 @@ object FlattenRegUpdate {
}
val bodyx = onStmt(mod.body)
- mod.copy(body = Block(bodyx +: regUpdates))
+ mod.copy(body = Block(bodyx +: regUpdates.toSeq))
}
}
diff --git a/src/main/scala/firrtl/transforms/GroupComponents.scala b/src/main/scala/firrtl/transforms/GroupComponents.scala
index 3b982fbf..166feba0 100644
--- a/src/main/scala/firrtl/transforms/GroupComponents.scala
+++ b/src/main/scala/firrtl/transforms/GroupComponents.scala
@@ -261,13 +261,13 @@ class GroupComponents extends Transform with DependencyAPIMigration {
val topStmts = mutable.ArrayBuffer[Statement]()
val group = byNode(r.name)
groupStatements(group) += r mapExpr inGroupFixExps(group, topStmts)
- Block(topStmts)
+ Block(topStmts.toSeq)
case c: Connect if byNode(getWRef(c.loc).name) != "" =>
// Sink is in a group
val topStmts = mutable.ArrayBuffer[Statement]()
val group = byNode(getWRef(c.loc).name)
groupStatements(group) += Connect(c.info, c.loc, inGroupFixExps(group, topStmts)(c.expr))
- Block(topStmts)
+ Block(topStmts.toSeq)
case i: IsInvalid if byNode(getWRef(i.expr).name) != "" =>
// Sink is in group
val group = byNode(getWRef(i.expr).name)
@@ -289,7 +289,7 @@ class GroupComponents extends Transform with DependencyAPIMigration {
// For all group labels (not including the original module label), return a new Module.
val newModules = labelOrder.filter(_ != "") map { group =>
- Module(NoInfo, label2module(group), groupPorts(group).distinct, Block(groupStatements(group).distinct))
+ Module(NoInfo, label2module(group), groupPorts(group).distinct.toSeq, Block(groupStatements(group).distinct.toSeq))
}
Seq(m.copy(body = finalTopBody)) ++ newModules
}
diff --git a/src/main/scala/firrtl/transforms/InferResets.scala b/src/main/scala/firrtl/transforms/InferResets.scala
index 1798e3d8..ebf1d67a 100644
--- a/src/main/scala/firrtl/transforms/InferResets.scala
+++ b/src/main/scala/firrtl/transforms/InferResets.scala
@@ -90,7 +90,7 @@ object InferResets {
tokens.groupBy { case (TargetToken.Field(n) +: t, _) => n }
.mapValues { ts =>
fromTokens(ts.map { case (_ +: t, tpe) => (t, tpe) }:_*)
- }
+ }.toMap
BundleTree(fields)
}
}
@@ -281,7 +281,7 @@ class InferResets extends Transform with DependencyAPIMigration {
private def makeDeclMap(map: Map[ReferenceTarget, Type]): Map[String, TypeTree] =
map.groupBy(_._1.ref).mapValues { ts =>
TypeTree.fromTokens(ts.toSeq.map { case (target, tpe) => (target.component, tpe) }:_*)
- }
+ }.toMap
private def implPort(map: Map[String, TypeTree])(port: Port): Port =
map.get(port.name)
diff --git a/src/main/scala/firrtl/transforms/ManipulateNames.scala b/src/main/scala/firrtl/transforms/ManipulateNames.scala
index c55dab57..ea988e72 100644
--- a/src/main/scala/firrtl/transforms/ManipulateNames.scala
+++ b/src/main/scala/firrtl/transforms/ManipulateNames.scala
@@ -141,17 +141,21 @@ private class RenameDataStructure(
val namespaces: mutable.HashMap[CompleteTarget, Namespace] =
mutable.HashMap(CircuitTarget(circuit.main) -> Namespace(circuit))
+ /** Wraps a HashMap to provide better error messages when accessing a non-existing element */
+ class InstanceHashMap {
+ type Key = ReferenceTarget
+ type Value = Either[ReferenceTarget, InstanceTarget]
+ private val m = mutable.HashMap[Key, Value]()
+ def apply(key: ReferenceTarget): Value = m.getOrElse(key, {
+ throw new FirrtlUserException(
+ s"""|Reference target '${key.serialize}' did not exist in mapping of reference targets to insts/mems.
+ | This is indicative of a circuit that has not been run through LowerTypes.""".stripMargin)
+ })
+ def update(key: Key, value: Value): Unit = m.update(key, value)
+ }
+
/** A mapping of a reference to either an instance or a memory (encoded as a [[ReferenceTarget]] */
- val instanceMap: mutable.HashMap[ReferenceTarget, Either[ReferenceTarget, InstanceTarget]] =
- new mutable.HashMap[ReferenceTarget, Either[ReferenceTarget, InstanceTarget]] {
- override def apply(a: ReferenceTarget) = try {
- super.apply(a)
- } catch {
- case t: NoSuchElementException => throw new FirrtlUserException(
- s"""|Reference target '${a.serialize}' did not exist in mapping of reference targets to insts/mems.
- | This is indicative of a circuit that has not been run through LowerTypes.""".stripMargin, t)
- }
- }
+ val instanceMap: InstanceHashMap = new InstanceHashMap
/** Return true if a target should be skipped based on allow and block parameters */
def skip(a: Target): Boolean = block(a) || !allow(a)
diff --git a/src/main/scala/firrtl/transforms/PropagatePresetAnnotations.scala b/src/main/scala/firrtl/transforms/PropagatePresetAnnotations.scala
index 6bc948cd..da803837 100644
--- a/src/main/scala/firrtl/transforms/PropagatePresetAnnotations.scala
+++ b/src/main/scala/firrtl/transforms/PropagatePresetAnnotations.scala
@@ -71,7 +71,7 @@ class PropagatePresetAnnotations extends Transform with DependencyAPIMigration {
* @param presetAnnos all the annotations
* @return updated annotations
*/
- private def propagate(cs: CircuitState, presetAnnos: Seq[PresetAnnotation]): AnnotationSeq = {
+ private def propagate(cs: CircuitState, presetAnnos: Seq[PresetAnnotation], otherAnnos: Seq[Annotation]): AnnotationSeq = {
val presets = presetAnnos.groupBy(_.target)
// store all annotated asyncreset references
val asyncToAnnotate = new TargetSet()
@@ -80,7 +80,7 @@ class PropagatePresetAnnotations extends Transform with DependencyAPIMigration {
// store async-reset trees
val asyncCoMap = new TargetSetMap()
// Annotations to be appended and returned as result of the transform
- val annos = cs.annotations.to[mutable.ArrayBuffer] -- presetAnnos
+ val newAnnos = mutable.ArrayBuffer[Annotation]()
val circuitTarget = CircuitTarget(cs.circuit.main)
@@ -262,7 +262,7 @@ class PropagatePresetAnnotations extends Transform with DependencyAPIMigration {
*/
/** Annotate a given target and all its children according to the asyncCoMap */
- def annotateCo(ta: ReferenceTarget){
+ def annotateCo(ta: ReferenceTarget): Unit = {
if (asyncCoMap.contains(ta)){
toCleanUp += ta
asyncCoMap(ta) foreach( (t: ReferenceTarget) => {
@@ -278,7 +278,7 @@ class PropagatePresetAnnotations extends Transform with DependencyAPIMigration {
if (asyncRegMap.contains(ta)) {
annotateRegSet(asyncRegMap(ta))
} else {
- annos += new PresetRegAnnotation(ta)
+ newAnnos += PresetRegAnnotation(ta)
}
})
}
@@ -301,7 +301,7 @@ class PropagatePresetAnnotations extends Transform with DependencyAPIMigration {
cs.circuit.foreachModule(processModule) // PHASE 1 : Initialize
annotateAsyncSet(asyncToAnnotate) // PHASE 2 : Annotate
- annos
+ otherAnnos ++ newAnnos
}
/*
@@ -422,15 +422,14 @@ class PropagatePresetAnnotations extends Transform with DependencyAPIMigration {
def execute(state: CircuitState): CircuitState = {
// Collect all user-defined PresetAnnotation
- val presets = state.annotations
- .collect{ case m : PresetAnnotation => m }
+ val (presets, otherAnnos) = state.annotations.partition { case _: PresetAnnotation => true ; case _ => false }
// No PresetAnnotation => no need to walk the IR
- if (presets.size == 0){
+ if (presets.isEmpty){
state
} else {
// PHASE I - Propagate
- val annos = propagate(state, presets)
+ val annos = propagate(state, presets.asInstanceOf[Seq[PresetAnnotation]], otherAnnos)
// PHASE II - CleanUp
val cleanCircuit = cleanUpPresetTree(state.circuit, annos)
// Because toCleanup is a class field, we need to clear it
diff --git a/src/main/scala/firrtl/transforms/RemoveWires.scala b/src/main/scala/firrtl/transforms/RemoveWires.scala
index 0e70ec1f..f692e513 100644
--- a/src/main/scala/firrtl/transforms/RemoveWires.scala
+++ b/src/main/scala/firrtl/transforms/RemoveWires.scala
@@ -51,7 +51,7 @@ class RemoveWires extends Transform with DependencyAPIMigration {
e
}
rec(expr)
- refs
+ refs.toSeq
}
// Transform netlist into DefNodes
@@ -142,7 +142,7 @@ class RemoveWires extends Transform with DependencyAPIMigration {
onStmt(body)
getOrderedNodes(netlist, regInfo) match {
case Success(logic) =>
- Module(info, name, ports, Block(decls ++ logic ++ otherStmts))
+ Module(info, name, ports, Block(List() ++ decls ++ logic ++ otherStmts))
// If we hit a CyclicException, just abort removing wires
case Failure(c: CyclicException) =>
val problematicNode = c.node