aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/firrtl/transforms/DeadCodeElimination.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala/firrtl/transforms/DeadCodeElimination.scala')
-rw-r--r--src/main/scala/firrtl/transforms/DeadCodeElimination.scala16
1 files changed, 12 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)
+ }
}
}