aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSchuyler Eldridge2020-07-10 22:55:47 -0400
committerSchuyler Eldridge2020-07-16 12:51:54 -0400
commitdebee42971229c7d1f1f698d65ea3fd089609af5 (patch)
tree379a7b85741ac56c08bd98e94b7051ac7f4b774f
parentf5dd8ddc72ce829406337f22e73cac27b58aa521 (diff)
Simplify CustomTransformSpec
Refactor the test used in the CustomTransformSpec to assert that inputForm=LowForm legacy transforms run right before the emitter (see note below!). The new test looks only for a list of (customTransform, emitter) in a sliding, size-2 window of the flattened transform order. Previously, this was looking for a match before and after the custom transform. The old implementation necessitate busywork updates of the test when new transforms are added that changed the transform running before the custom transform. Note: this test, as written is intentionally wrong. When verification statements were added, the test was changed to not do what it's supposed to do. Namely, the test is supposed to ensure that an inputForm=LowForm transform runs immediately before its emitter. However, the test is actually checking that the custom transform runs before transforms that convert and remove verification statements. I'm intentionally leaving the test broken, but doing the refactor in order to make this easier to manually backport to the 1.3.x branch. Signed-off-by: Schuyler Eldridge <schuyler.eldridge@ibm.com>
-rw-r--r--src/test/scala/firrtlTests/CustomTransformSpec.scala53
1 files changed, 21 insertions, 32 deletions
diff --git a/src/test/scala/firrtlTests/CustomTransformSpec.scala b/src/test/scala/firrtlTests/CustomTransformSpec.scala
index 7a683ea9..9141a9f7 100644
--- a/src/test/scala/firrtlTests/CustomTransformSpec.scala
+++ b/src/test/scala/firrtlTests/CustomTransformSpec.scala
@@ -6,11 +6,11 @@ import firrtl.ir.Circuit
import firrtl._
import firrtl.passes.Pass
import firrtl.ir._
-import firrtl.stage.{FirrtlSourceAnnotation, FirrtlStage, Forms, RunFirrtlTransformAnnotation}
+import firrtl.stage.{FirrtlSourceAnnotation, FirrtlStage, RunFirrtlTransformAnnotation}
import firrtl.options.Dependency
import firrtl.transforms.{IdentityTransform, LegalizeAndReductionsTransform}
import firrtl.testutils._
-import firrtl.transforms.formal.{RemoveVerificationStatements, ConvertAsserts}
+import firrtl.transforms.formal.ConvertAsserts
import scala.reflect.runtime
@@ -150,40 +150,29 @@ class CustomTransformSpec extends FirrtlFlatSpec {
they should "run right before the emitter* when inputForm=LowForm" in {
- val custom = Dependency[IdentityLowForm]
-
- def testOrder(after: Seq[Dependency[Transform]], before: Seq[Dependency[Transform]]): Unit = {
- val expectedSlice: Seq[Dependency[Transform]] = before ++: custom +: after
-
- info(expectedSlice.map(_.getSimpleName).mkString(" -> ") + " ok!")
-
- val compiler = new firrtl.stage.transforms.Compiler(custom +: after)
- info("Transform Order: \n" + compiler.prettyPrint(" "))
-
+ val locationMap = Map(
+ Dependency[LowFirrtlEmitter] -> Dependency[LowFirrtlEmitter],
+ Dependency[MinimumVerilogEmitter] -> Dependency(ConvertAsserts),
+ Dependency[VerilogEmitter] -> Dependency(ConvertAsserts),
+ Dependency[SystemVerilogEmitter] -> Dependency[LegalizeAndReductionsTransform]
+ )
- compiler
+ Seq(
+ Dependency[LowFirrtlEmitter],
+ Dependency[MinimumVerilogEmitter],
+ Dependency[VerilogEmitter],
+ Dependency[SystemVerilogEmitter]
+ ).foreach { emitter =>
+ val custom = Dependency[IdentityLowForm]
+ val tm = new firrtl.stage.transforms.Compiler(custom :: emitter :: Nil)
+ info(s"when using ${emitter.getObject.name}")
+ tm
.flattenedTransformOrder
- .map(Dependency.fromTransform(_))
- .containsSlice(expectedSlice) should be (true)
+ .map(Dependency.fromTransform)
+ .sliding(2)
+ .toList should contain (Seq(custom, locationMap(emitter)))
}
- val Seq(low, lowMinOpt, lowOpt) =
- Seq(Forms.LowForm, Forms.LowFormMinimumOptimized, Forms.LowFormOptimized)
- .map(target => new firrtl.stage.transforms.Compiler(target))
- .map(_.flattenedTransformOrder.map(Dependency.fromTransform(_)))
-
- Seq( (Seq(Dependency[LowFirrtlEmitter]), Seq(low.last) ),
- (Seq(Dependency[LegalizeAndReductionsTransform],
- Dependency(ConvertAsserts),
- Dependency[RemoveVerificationStatements],
- Dependency[MinimumVerilogEmitter]), Seq(lowMinOpt.last)),
- (Seq(Dependency[LegalizeAndReductionsTransform],
- Dependency(ConvertAsserts),
- Dependency[RemoveVerificationStatements],
- Dependency[VerilogEmitter]), Seq(lowOpt.last) ),
- (Seq(Dependency[LegalizeAndReductionsTransform],
- Dependency[SystemVerilogEmitter]), Seq(lowOpt.last) )
- ).foreach((testOrder _).tupled)
}
they should "work if placed inside an object" in {