From beb5bc9850fd69adff36f38fb00a1f68bb1918fe Mon Sep 17 00:00:00 2001 From: Jack Koenig Date: Sat, 11 Sep 2021 00:29:10 -0700 Subject: Remove BlackBoxSourceHelper from ReplaceMemTransform (#2355) BlackBoxSourceHelper should only run late in compilation to allow transforms to tweak its behavior (eg. changing BlackBoxTargetDirAnno).--- .../firrtl/passes/memlib/ReplaceMemTransform.scala | 4 +- src/test/scala/firrtlTests/ReplSeqMemTests.scala | 3 +- .../transforms/BlackBoxSourceHelperSpec.scala | 47 +++++++++++++++++++++- 3 files changed, 48 insertions(+), 6 deletions(-) diff --git a/src/main/scala/firrtl/passes/memlib/ReplaceMemTransform.scala b/src/main/scala/firrtl/passes/memlib/ReplaceMemTransform.scala index 6f883db2..9acccafa 100644 --- a/src/main/scala/firrtl/passes/memlib/ReplaceMemTransform.scala +++ b/src/main/scala/firrtl/passes/memlib/ReplaceMemTransform.scala @@ -9,7 +9,6 @@ import firrtl.annotations._ import firrtl.options.{CustomFileEmission, Dependency, HasShellOptions, ShellOption} import firrtl.passes.wiring._ import firrtl.stage.{Forms, RunFirrtlTransformAnnotation} -import firrtl.transforms.BlackBoxSourceHelper import java.io.{CharArrayWriter, PrintWriter} @@ -161,7 +160,6 @@ class ReplSeqMem extends SeqTransform with HasShellOptions with DependencyAPIMig new ResolveMemoryReference, new ReplaceMemMacros, new WiringTransform, - new DumpMemoryAnnotations, - new BlackBoxSourceHelper + new DumpMemoryAnnotations ) } diff --git a/src/test/scala/firrtlTests/ReplSeqMemTests.scala b/src/test/scala/firrtlTests/ReplSeqMemTests.scala index 9f83bec2..924c767f 100644 --- a/src/test/scala/firrtlTests/ReplSeqMemTests.scala +++ b/src/test/scala/firrtlTests/ReplSeqMemTests.scala @@ -39,7 +39,8 @@ class ReplSeqMemSpec extends SimpleTransformSpec { def outputForm = LowForm def transforms = Seq(new ConstantPropagation, CommonSubexpressionElimination, new DeadCodeElimination, RemoveEmpty) - } + }, + new BlackBoxSourceHelper ) def checkMemConf(circuitState: CircuitState, mems: Set[MemConf]) { diff --git a/src/test/scala/firrtlTests/transforms/BlackBoxSourceHelperSpec.scala b/src/test/scala/firrtlTests/transforms/BlackBoxSourceHelperSpec.scala index 81b5fd5d..45be4cb3 100644 --- a/src/test/scala/firrtlTests/transforms/BlackBoxSourceHelperSpec.scala +++ b/src/test/scala/firrtlTests/transforms/BlackBoxSourceHelperSpec.scala @@ -2,16 +2,37 @@ package firrtlTests.transforms -import firrtl.annotations.{CircuitName, ModuleName} +import firrtl.annotations._ import firrtl.transforms._ -import firrtl.{Transform, VerilogEmitter} +import firrtl._ import firrtl.FileUtils import firrtl.testutils.LowTransformSpec +import firrtl.stage._ +import firrtl.options.Dependency +import java.io.File +import firrtl.util.BackendCompilationUtilities.createTestDirectory +import _root_.logger._ + +class ChangeBlackBoxTargetDir extends Transform with DependencyAPIMigration { + override def prerequisites = + Dependency[firrtl.passes.memlib.ReplSeqMem] +: Forms.LowFormOptimized + override def optionalPrerequisiteOf = Forms.BackendEmitters + override def invalidates(a: Transform): Boolean = false + + def execute(state: CircuitState): CircuitState = { + val annosx = state.annotations.map { + case BlackBoxTargetDirAnno(dir) => BlackBoxTargetDirAnno(s"$dir/subdir") + case other => other + } + state.copy(annotations = annosx) + } +} class BlacklBoxSourceHelperTransformSpec extends LowTransformSpec { def transform: Transform = new BlackBoxSourceHelper private val moduleName = ModuleName("Top", CircuitName("Top")) + private val bbTarget = CircuitTarget("Top").module("AdderExtModule") private val input = """ |circuit Top : | @@ -150,4 +171,26 @@ class BlacklBoxSourceHelperTransformSpec extends LowTransformSpec { ) } + "BlackBoxSourceHelper" should "not run until late" in { + val name = "BlackBoxSourceHelper_late" + + val dir = createTestDirectory(name) + val subdir = new File(dir, "subdir") + + val filename = "BFFAdd.v" + + val annos = List( + FirrtlSourceAnnotation(input), + RunFirrtlTransformAnnotation(new ChangeBlackBoxTargetDir), + BlackBoxTargetDirAnno(dir.toString), + BlackBoxInlineAnno(bbTarget, filename, ""), + EmitCircuitAnnotation(classOf[VerilogEmitter]), + LogLevelAnnotation(LogLevel.Debug) + ) + + (new FirrtlPhase).transform(annos) + + new File(subdir, filename) should exist + new File(dir, filename) shouldNot exist + } } -- cgit v1.2.3