diff options
Diffstat (limited to 'src/main/scala/firrtl/transforms')
| -rw-r--r-- | src/main/scala/firrtl/transforms/ConstantPropagation.scala | 19 | ||||
| -rw-r--r-- | src/main/scala/firrtl/transforms/OptimizationAnnotations.scala | 3 |
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, |
