aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSchuyler Eldridge2020-01-15 17:12:53 -0500
committermergify[bot]2020-01-15 22:12:53 +0000
commit6b21b7df6f70ed753abe03814c88ef9010259303 (patch)
tree691d1db42444b6d751e7f5bc9d4e1c570977495a /src
parent16acdc39291b8e35548e22ebaabb036da847de37 (diff)
Filter ResolvePaths in EliminateTargetPaths (#1310)
Change EliminateTargetPaths to remove ResolvePaths annotations in the output AnnotationSeq. This prevents a bug whereby the upstream ResolvePaths annotations from previous runs of EliminateTargetPaths can result in unexpected duplication. Adds a test that checks that ResolvePaths annotations are actually removed. Signed-off-by: Schuyler Eldridge <schuyler.eldridge@ibm.com> Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Diffstat (limited to 'src')
-rw-r--r--src/main/scala/firrtl/annotations/transforms/EliminateTargetPaths.scala9
-rw-r--r--src/test/scala/firrtlTests/annotationTests/EliminateTargetPathsSpec.scala15
2 files changed, 21 insertions, 3 deletions
diff --git a/src/main/scala/firrtl/annotations/transforms/EliminateTargetPaths.scala b/src/main/scala/firrtl/annotations/transforms/EliminateTargetPaths.scala
index f6bab6ea..2f20430b 100644
--- a/src/main/scala/firrtl/annotations/transforms/EliminateTargetPaths.scala
+++ b/src/main/scala/firrtl/annotations/transforms/EliminateTargetPaths.scala
@@ -133,10 +133,13 @@ class EliminateTargetPaths extends Transform {
override protected def execute(state: CircuitState): CircuitState = {
- val annotations = state.annotations.collect { case a: ResolvePaths => a }
+ val (annotations, annotationsx) = state.annotations.partition{
+ case a: ResolvePaths => true
+ case _ => false
+ }
// Collect targets that are not local
- val targets = annotations.flatMap(_.targets.collect { case x: IsMember => x })
+ val targets = annotations.map(_.asInstanceOf[ResolvePaths]).flatMap(_.targets.collect { case x: IsMember => x })
// Check validity of paths in targets
val instanceOfModules = new InstanceGraph(state.circuit).getChildrenInstanceOfModule
@@ -162,6 +165,6 @@ class EliminateTargetPaths extends Transform {
val (newCircuit, renameMap) = run(state.circuit, targets)
- state.copy(circuit = newCircuit, renames = Some(renameMap))
+ state.copy(circuit = newCircuit, renames = Some(renameMap), annotations = annotationsx)
}
}
diff --git a/src/test/scala/firrtlTests/annotationTests/EliminateTargetPathsSpec.scala b/src/test/scala/firrtlTests/annotationTests/EliminateTargetPathsSpec.scala
index c75e0914..7aac277f 100644
--- a/src/test/scala/firrtlTests/annotationTests/EliminateTargetPathsSpec.scala
+++ b/src/test/scala/firrtlTests/annotationTests/EliminateTargetPathsSpec.scala
@@ -357,4 +357,19 @@ class EliminateTargetPathsSpec extends FirrtlPropSpec with FirrtlMatchers {
outputLines should contain (line)
}
}
+
+ property("It should remove ResolvePaths annotations") {
+ val input =
+ """|circuit Foo:
+ | module Bar:
+ | skip
+ | module Foo:
+ | inst bar of Bar
+ |""".stripMargin
+
+ CircuitState(passes.ToWorkingIR.run(Parser.parse(input)), UnknownForm, Nil)
+ .resolvePaths(Seq(CircuitTarget("Foo").module("Foo").instOf("bar", "Bar")))
+ .annotations
+ .collect{ case a: firrtl.annotations.transforms.ResolvePaths => a } should be (empty)
+ }
}