aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlbert Chen2018-11-02 11:23:39 -0700
committerJack Koenig2018-11-02 11:23:39 -0700
commit38514a5d3d85d5e4be32e91cb376d2cd7c61288f (patch)
treef99521dce3fe272512577fea2c1568c75bfb8213
parentece8e1b0bb459fd5aa139390b6cb7d313077d21d (diff)
Fix renaming in UniquifyPorts (#930)
-rw-r--r--src/main/scala/firrtl/passes/Uniquify.scala4
-rw-r--r--src/test/scala/firrtlTests/UniquifySpec.scala19
2 files changed, 19 insertions, 4 deletions
diff --git a/src/main/scala/firrtl/passes/Uniquify.scala b/src/main/scala/firrtl/passes/Uniquify.scala
index 73f967f4..2b6fa55d 100644
--- a/src/main/scala/firrtl/passes/Uniquify.scala
+++ b/src/main/scala/firrtl/passes/Uniquify.scala
@@ -355,7 +355,9 @@ object Uniquify extends Transform {
portTypeMap += (m.name -> uniquePortsType)
ports zip uniquePortsType.fields map { case (p, f) =>
- renames.rename(p.name, f.name)
+ (Utils.create_exps(p.name, p.tpe) zip Utils.create_exps(f.name, f.tpe)) foreach {
+ case (from, to) => renames.rename(from.serialize, to.serialize)
+ }
Port(p.info, f.name, p.direction, f.tpe)
}
}
diff --git a/src/test/scala/firrtlTests/UniquifySpec.scala b/src/test/scala/firrtlTests/UniquifySpec.scala
index 27918cc5..43d1e733 100644
--- a/src/test/scala/firrtlTests/UniquifySpec.scala
+++ b/src/test/scala/firrtlTests/UniquifySpec.scala
@@ -9,6 +9,9 @@ import firrtl.Parser
import firrtl.ir.Circuit
import firrtl.passes._
import firrtl._
+import firrtl.annotations._
+import firrtl.annotations.TargetToken._
+import firrtl.transforms.DontTouchAnnotation
class UniquifySpec extends FirrtlFlatSpec {
@@ -20,9 +23,11 @@ class UniquifySpec extends FirrtlFlatSpec {
Uniquify
)
- private def executeTest(input: String, expected: Seq[String]) = {
+ private def executeTest(input: String, expected: Seq[String]): Unit = executeTest(input, expected, Seq.empty, Seq.empty)
+ private def executeTest(input: String, expected: Seq[String],
+ inputAnnos: Seq[Annotation], expectedAnnos: Seq[Annotation]): Unit = {
val circuit = Parser.parse(input.split("\n").toIterator)
- val result = transforms.foldLeft(CircuitState(circuit, UnknownForm)) {
+ val result = transforms.foldLeft(CircuitState(circuit, UnknownForm, inputAnnos)) {
(c: CircuitState, p: Transform) => p.runTransform(c)
}
val c = result.circuit
@@ -31,6 +36,8 @@ class UniquifySpec extends FirrtlFlatSpec {
expected foreach { e =>
lines should contain(e)
}
+
+ result.annotations.toSeq should equal(expectedAnnos)
}
behavior of "Uniquify"
@@ -48,7 +55,13 @@ class UniquifySpec extends FirrtlFlatSpec {
"output a_0_c_ : UInt<5>",
"output a__0 : UInt<6>") map normalized
- executeTest(input, expected)
+ val inputAnnos = Seq(DontTouchAnnotation(ReferenceTarget("Test", "Test", Seq.empty, "a", Seq(Index(0), Field("b")))),
+ DontTouchAnnotation(ReferenceTarget("Test", "Test", Seq.empty, "a", Seq(Index(0), Field("c"), Index(0), Field("e")))))
+
+ val expectedAnnos = Seq(DontTouchAnnotation(ReferenceTarget("Test", "Test", Seq.empty, "a__", Seq(Index(0), Field("b")))),
+ DontTouchAnnotation(ReferenceTarget("Test", "Test", Seq.empty, "a__", Seq(Index(0), Field("c_"), Index(0), Field("e")))))
+
+ executeTest(input, expected, inputAnnos, expectedAnnos)
}
it should "rename colliding registers" in {