diff options
| author | Jack Koenig | 2017-06-21 09:35:15 -0700 |
|---|---|---|
| committer | Jack Koenig | 2017-06-21 10:18:20 -0700 |
| commit | 5135e9c6aeb1c9d472a5b29adb44a4acaf504fb8 (patch) | |
| tree | baa097e2bae57ac8f15e95793e5d53b170f1a656 /src/main/scala/firrtl/transforms | |
| parent | 4613ad2b519ae85fbab89e58d3304cf455514552 (diff) | |
Add --no-dce command-line option to skip DCE
Diffstat (limited to 'src/main/scala/firrtl/transforms')
| -rw-r--r-- | src/main/scala/firrtl/transforms/DeadCodeElimination.scala | 16 | ||||
| -rw-r--r-- | src/main/scala/firrtl/transforms/OptimizationAnnotations.scala | 11 |
2 files changed, 23 insertions, 4 deletions
diff --git a/src/main/scala/firrtl/transforms/DeadCodeElimination.scala b/src/main/scala/firrtl/transforms/DeadCodeElimination.scala index 91a5dd5a..aa147733 100644 --- a/src/main/scala/firrtl/transforms/DeadCodeElimination.scala +++ b/src/main/scala/firrtl/transforms/DeadCodeElimination.scala @@ -286,7 +286,7 @@ class DeadCodeElimination extends Transform { } def execute(state: CircuitState): CircuitState = { - val (dontTouches: Seq[LogicNode], doTouchExtMods: Seq[String]) = + val (dontTouches: Seq[LogicNode], doTouchExtMods: Seq[String], noDCE: Option[Boolean]) = state.annotations match { case Some(aMap) => // TODO Do with single walk over annotations @@ -296,9 +296,17 @@ class DeadCodeElimination extends Transform { val optExtMods = aMap.annotations.collect { case OptimizableExtModuleAnnotation(ModuleName(name, _)) => name } - (dontTouches, optExtMods) - case None => (Seq.empty, Seq.empty) + val noDCE = aMap.annotations.collectFirst { + case NoDCEAnnotation() => true + } + (dontTouches, optExtMods, noDCE) + case None => (Seq.empty, Seq.empty, None) } - run(state, dontTouches, doTouchExtMods.toSet) + if (noDCE.getOrElse(false)) { + logger.info("Skipping DCE") + state + } else { + run(state, dontTouches, doTouchExtMods.toSet) + } } } diff --git a/src/main/scala/firrtl/transforms/OptimizationAnnotations.scala b/src/main/scala/firrtl/transforms/OptimizationAnnotations.scala index 23723a60..2336710a 100644 --- a/src/main/scala/firrtl/transforms/OptimizationAnnotations.scala +++ b/src/main/scala/firrtl/transforms/OptimizationAnnotations.scala @@ -5,6 +5,17 @@ package transforms import firrtl.annotations._ import firrtl.passes.PassException +/** Indicate that DCE should not be run */ +object NoDCEAnnotation { + val marker = "noDCE!" + val transform = classOf[DeadCodeElimination] + def apply(): Annotation = Annotation(CircuitTopName, transform, marker) + def unapply(a: Annotation): Boolean = a match { + case Annotation(_, targetXform, value) if targetXform == transform && value == marker => true + case _ => false + } +} + /** A component that should be preserved * * DCE treats the component as a top-level sink of the circuit |
