aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/firrtl/transforms
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala/firrtl/transforms')
-rw-r--r--src/main/scala/firrtl/transforms/ConstantPropagation.scala19
-rw-r--r--src/main/scala/firrtl/transforms/OptimizationAnnotations.scala3
2 files changed, 19 insertions, 3 deletions
diff --git a/src/main/scala/firrtl/transforms/ConstantPropagation.scala b/src/main/scala/firrtl/transforms/ConstantPropagation.scala
index 7106c699..5610c7e7 100644
--- a/src/main/scala/firrtl/transforms/ConstantPropagation.scala
+++ b/src/main/scala/firrtl/transforms/ConstantPropagation.scala
@@ -13,7 +13,7 @@ import firrtl.PrimOps._
import firrtl.graph.DiGraph
import firrtl.analyses.InstanceKeyGraph
import firrtl.annotations.TargetToken.Ref
-import firrtl.options.Dependency
+import firrtl.options.{Dependency, RegisteredTransform, ShellOption}
import firrtl.stage.DisableFold
import annotation.tailrec
@@ -101,7 +101,7 @@ object ConstantPropagation {
}
-class ConstantPropagation extends Transform with DependencyAPIMigration {
+class ConstantPropagation extends Transform with RegisteredTransform with DependencyAPIMigration {
import ConstantPropagation._
override def prerequisites =
@@ -124,6 +124,14 @@ class ConstantPropagation extends Transform with DependencyAPIMigration {
case _ => false
}
+ val options = Seq(
+ new ShellOption[Unit](
+ longOption = "no-constant-propagation",
+ toAnnotationSeq = _ => Seq(NoConstantPropagationAnnotation),
+ helpText = "Disable constant propagation elimination"
+ )
+ )
+
sealed trait SimplifyBinaryOp {
def matchingArgsValue(e: DoPrim, arg: Expression): Expression
def apply(e: DoPrim): Expression = {
@@ -869,6 +877,11 @@ class ConstantPropagation extends Transform with DependencyAPIMigration {
val disabledOps = state.annotations.collect { case DisableFold(op) => op }.toSet
- state.copy(circuit = run(state.circuit, dontTouchMap, disabledOps))
+ if (state.annotations.contains(NoConstantPropagationAnnotation)) {
+ logger.info("Skipping Constant Propagation")
+ state
+ } else {
+ state.copy(circuit = run(state.circuit, dontTouchMap, disabledOps))
+ }
}
}
diff --git a/src/main/scala/firrtl/transforms/OptimizationAnnotations.scala b/src/main/scala/firrtl/transforms/OptimizationAnnotations.scala
index 10163b72..e817571a 100644
--- a/src/main/scala/firrtl/transforms/OptimizationAnnotations.scala
+++ b/src/main/scala/firrtl/transforms/OptimizationAnnotations.scala
@@ -9,6 +9,9 @@ import firrtl.passes.PassException
/** Indicate that DCE should not be run */
case object NoDCEAnnotation extends NoTargetAnnotation
+/** Indicate that ConstantPropagation should not be run */
+case object NoConstantPropagationAnnotation extends NoTargetAnnotation
+
/** Lets an annotation mark its ReferenceTarget members as DontTouch
*
* This permits a transform to run and remove its associated annotations,