aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala
diff options
context:
space:
mode:
authorSchuyler Eldridge2020-07-25 02:15:42 -0400
committerGitHub2020-07-25 06:15:42 +0000
commitd4e1a466568644cef587bb6eea3c102ba879e7b8 (patch)
treebb1341d024cfac8122b423f952698f4ad4117f3b /src/main/scala
parentb24b9a0167762b7f7ef1aae3fd6735a3bb1f898e (diff)
Integrate new transforms with firrtl.stage.Forms (#1754)
Move new transforms, recently added, into existing or new sets of transforms (defined in firrtl.stage.Forms). One transform is a mandatory low FIRRTL optimization: - firrtl.transforms.LegalizeAndReductionsTransform Previously, this was included as a prerequisite of all Verilog emitters (minimum, normal, and SystemVerilog). Two transforms associated with converting and removing the new verification statements are moved into a new set of transforms, AssertsRemoved: - firrtl.transforms.formal.ConvertAsserts - firrtl.transforms.formal.RemoveVerificationStatements Previously, these transforms were directly added as prerequisites to the minimum Verilog and normal Verilog emitter, but not the SystemVerilog emitter. The designation of inputForm=LowForm for legacy, custom transforms is updated to include assertion removal transforms as part of their optionalPrerequisites. This has the effect of continuing to cause inputForm=LowForm transforms to run as late as possible (right before the low FIRRTL, minimum Verilog, Verilog, or SystemVeriog emitter). Tests are updated to reflect the new order in both CustomTransformSpec and LoweringCompilersSpec. 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/main/scala')
-rw-r--r--src/main/scala/firrtl/Compiler.scala2
-rw-r--r--src/main/scala/firrtl/Emitter.scala19
-rw-r--r--src/main/scala/firrtl/stage/Forms.scala7
3 files changed, 12 insertions, 16 deletions
diff --git a/src/main/scala/firrtl/Compiler.scala b/src/main/scala/firrtl/Compiler.scala
index 54380875..bed1b6d4 100644
--- a/src/main/scala/firrtl/Compiler.scala
+++ b/src/main/scala/firrtl/Compiler.scala
@@ -313,7 +313,7 @@ trait Transform extends TransformLike[CircuitState] with DependencyAPI[Transform
}
override def optionalPrerequisites: Seq[Dependency[Transform]] = inputForm match {
- case L => Forms.LowFormOptimized
+ case L => Forms.LowFormOptimized ++ Forms.AssertsRemoved
case _ => Seq.empty
}
diff --git a/src/main/scala/firrtl/Emitter.scala b/src/main/scala/firrtl/Emitter.scala
index 850c8ca1..3329cf9e 100644
--- a/src/main/scala/firrtl/Emitter.scala
+++ b/src/main/scala/firrtl/Emitter.scala
@@ -7,16 +7,15 @@ import java.io.Writer
import scala.collection.mutable
import firrtl.ir._
import firrtl.passes._
-import firrtl.transforms.{FixAddingNegativeLiterals, LegalizeAndReductionsTransform}
+import firrtl.transforms.FixAddingNegativeLiterals
import firrtl.annotations._
import firrtl.traversals.Foreachers._
import firrtl.PrimOps._
import firrtl.WrappedExpression._
import Utils._
import MemPortUtils.{memPortField, memType}
-import firrtl.options.{Dependency, HasShellOptions, PhaseException, ShellOption, Unserializable}
+import firrtl.options.{HasShellOptions, PhaseException, ShellOption, Unserializable}
import firrtl.stage.{RunFirrtlTransformAnnotation, TransformManager}
-import firrtl.transforms.formal.{RemoveVerificationStatements, ConvertAsserts}
// Datastructures
import scala.collection.mutable.ArrayBuffer
@@ -181,10 +180,7 @@ class VerilogEmitter extends SeqTransform with Emitter {
def inputForm = LowForm
def outputForm = LowForm
- override def prerequisites =
- Dependency(ConvertAsserts) +:
- Dependency[RemoveVerificationStatements] +:
- Dependency[LegalizeAndReductionsTransform] +:
+ override def prerequisites = firrtl.stage.Forms.AssertsRemoved ++
firrtl.stage.Forms.LowFormOptimized
override def optionalPrerequisiteOf = Seq.empty
@@ -1254,10 +1250,7 @@ class VerilogEmitter extends SeqTransform with Emitter {
class MinimumVerilogEmitter extends VerilogEmitter with Emitter {
- override def prerequisites =
- Dependency(ConvertAsserts) +:
- Dependency[RemoveVerificationStatements] +:
- Dependency[LegalizeAndReductionsTransform] +:
+ override def prerequisites = firrtl.stage.Forms.AssertsRemoved ++
firrtl.stage.Forms.LowFormMinimumOptimized
override def transforms = new TransformManager(firrtl.stage.Forms.VerilogMinimumOptimized, prerequisites)
@@ -1268,9 +1261,7 @@ class MinimumVerilogEmitter extends VerilogEmitter with Emitter {
class SystemVerilogEmitter extends VerilogEmitter {
override val outputSuffix: String = ".sv"
- override def prerequisites =
- Dependency[LegalizeAndReductionsTransform] +:
- firrtl.stage.Forms.LowFormOptimized
+ override def prerequisites = firrtl.stage.Forms.LowFormOptimized
override def addFormalStatement(formals: mutable.Map[Expression, ArrayBuffer[Seq[Any]]],
clk: Expression, en: Expression,
diff --git a/src/main/scala/firrtl/stage/Forms.scala b/src/main/scala/firrtl/stage/Forms.scala
index e6ed9603..933db4f4 100644
--- a/src/main/scala/firrtl/stage/Forms.scala
+++ b/src/main/scala/firrtl/stage/Forms.scala
@@ -72,7 +72,8 @@ object Forms {
Seq( Dependency(passes.RemoveValidIf),
Dependency(passes.PadWidths),
Dependency(passes.memlib.VerilogMemDelays),
- Dependency(passes.SplitExpressions) )
+ Dependency(passes.SplitExpressions),
+ Dependency[firrtl.transforms.LegalizeAndReductionsTransform] )
val LowFormOptimized: Seq[TransformDependency] = LowFormMinimumOptimized ++
Seq( Dependency[firrtl.transforms.ConstantPropagation],
@@ -95,6 +96,10 @@ object Forms {
val VerilogOptimized: Seq[TransformDependency] = LowFormOptimized ++ VerilogMinimumOptimized
+ val AssertsRemoved: Seq[TransformDependency] =
+ Seq( Dependency(firrtl.transforms.formal.ConvertAsserts),
+ Dependency[firrtl.transforms.formal.RemoveVerificationStatements] )
+
val BackendEmitters =
Seq( Dependency[VerilogEmitter],
Dependency[MinimumVerilogEmitter],