diff options
| author | Jack Koenig | 2020-09-06 12:33:57 -0700 |
|---|---|---|
| committer | GitHub | 2020-09-06 12:33:57 -0700 |
| commit | e420f99d87ece9f56504b3afc2e37d40b6e8c7b1 (patch) | |
| tree | b5b0bd58912cdc28dc7d7abe34cde812c6e1c755 /src/main | |
| parent | b6de1491af7ba88bb778aaeeba369b6b87151f9e (diff) | |
Add --pretty:no-expr-inlining to prevent expression inlining (#1869)
Also rename --Wno-scala-version-warning to
--warn:no-scala-version-deprecation and adopt naming convention where
resulting annotation matches the CLI option
Diffstat (limited to 'src/main')
6 files changed, 64 insertions, 31 deletions
diff --git a/src/main/scala/firrtl/stage/FirrtlAnnotations.scala b/src/main/scala/firrtl/stage/FirrtlAnnotations.scala index 3390e632..56072cb4 100644 --- a/src/main/scala/firrtl/stage/FirrtlAnnotations.scala +++ b/src/main/scala/firrtl/stage/FirrtlAnnotations.scala @@ -253,10 +253,10 @@ case class FirrtlCircuitAnnotation(circuit: Circuit) extends NoTargetAnnotation /** Suppresses warning about Scala 2.11 deprecation * - * - set with `--Wno-scala-version-warning` + * - set with `--warn:no-scala-version-deprecation` */ -case object SuppressScalaVersionWarning extends NoTargetAnnotation with FirrtlOption with HasShellOptions { - def longOption: String = "Wno-scala-version-warning" +case object WarnNoScalaVersionDeprecation extends NoTargetAnnotation with FirrtlOption with HasShellOptions { + def longOption: String = "warn:no-scala-version-deprecation" val options = Seq( new ShellOption[Unit]( longOption = longOption, @@ -265,3 +265,18 @@ case object SuppressScalaVersionWarning extends NoTargetAnnotation with FirrtlOp ) ) } + +/** Turn off all expression inlining + * + * @note this primarily applies to emitted Verilog + */ +case object PrettyNoExprInlining extends NoTargetAnnotation with FirrtlOption with HasShellOptions { + def longOption: String = "pretty:no-expr-inlining" + val options = Seq( + new ShellOption[Unit]( + longOption = longOption, + toAnnotationSeq = { _ => Seq(this) }, + helpText = "Disable expression inlining" + ) + ) +} diff --git a/src/main/scala/firrtl/stage/FirrtlCli.scala b/src/main/scala/firrtl/stage/FirrtlCli.scala index c33980dd..450248ea 100644 --- a/src/main/scala/firrtl/stage/FirrtlCli.scala +++ b/src/main/scala/firrtl/stage/FirrtlCli.scala @@ -20,7 +20,8 @@ trait FirrtlCli { this: Shell => firrtl.EmitCircuitAnnotation, firrtl.EmitAllModulesAnnotation, NoCircuitDedupAnnotation, - SuppressScalaVersionWarning + WarnNoScalaVersionDeprecation, + PrettyNoExprInlining ) .map(_.addOptions(parser)) diff --git a/src/main/scala/firrtl/stage/package.scala b/src/main/scala/firrtl/stage/package.scala index 37e2d13c..21182c84 100644 --- a/src/main/scala/firrtl/stage/package.scala +++ b/src/main/scala/firrtl/stage/package.scala @@ -32,7 +32,8 @@ package object stage { case InfoModeAnnotation(i) => c.copy(infoModeName = i) case FirrtlCircuitAnnotation(cir) => c.copy(firrtlCircuit = Some(cir)) case a: CompilerAnnotation => logger.warn(s"Use of CompilerAnnotation is deprecated. Ignoring $a"); c - case SuppressScalaVersionWarning => c + case WarnNoScalaVersionDeprecation => c + case PrettyNoExprInlining => c } } } diff --git a/src/main/scala/firrtl/stage/transforms/CheckScalaVersion.scala b/src/main/scala/firrtl/stage/transforms/CheckScalaVersion.scala index a7127dba..65dfd89a 100644 --- a/src/main/scala/firrtl/stage/transforms/CheckScalaVersion.scala +++ b/src/main/scala/firrtl/stage/transforms/CheckScalaVersion.scala @@ -3,7 +3,7 @@ package firrtl.stage.transforms import firrtl.{BuildInfo, CircuitState, DependencyAPIMigration, Transform} -import firrtl.stage.SuppressScalaVersionWarning +import firrtl.stage.WarnNoScalaVersionDeprecation import firrtl.options.StageUtils.dramaticWarning object CheckScalaVersion { @@ -27,9 +27,9 @@ class CheckScalaVersion extends Transform with DependencyAPIMigration { override def invalidates(a: Transform) = false def execute(state: CircuitState): CircuitState = { - def suppress = state.annotations.contains(SuppressScalaVersionWarning) + def suppress = state.annotations.contains(WarnNoScalaVersionDeprecation) if (getScalaMajorVersion == 11 && !suppress) { - val option = s"--${SuppressScalaVersionWarning.longOption}" + val option = s"--${WarnNoScalaVersionDeprecation.longOption}" dramaticWarning(deprecationMessage("2.11", option)) } state diff --git a/src/main/scala/firrtl/transforms/CombineCats.scala b/src/main/scala/firrtl/transforms/CombineCats.scala index 3014d0e3..6d05698f 100644 --- a/src/main/scala/firrtl/transforms/CombineCats.scala +++ b/src/main/scala/firrtl/transforms/CombineCats.scala @@ -7,6 +7,7 @@ import firrtl.PrimOps._ import firrtl.WrappedExpression._ import firrtl.annotations.NoTargetAnnotation import firrtl.options.Dependency +import firrtl.stage.PrettyNoExprInlining import scala.collection.mutable @@ -74,11 +75,18 @@ class CombineCats extends Transform with DependencyAPIMigration { val defaultMaxCatLen = 10 def execute(state: CircuitState): CircuitState = { - val maxCatLen = state.annotations.collectFirst { - case m: MaxCatLenAnnotation => m.maxCatLen - }.getOrElse(defaultMaxCatLen) - - val modulesx = state.circuit.modules.map(CombineCats.onMod(maxCatLen)) - state.copy(circuit = state.circuit.copy(modules = modulesx)) + val run = !state.annotations.contains(PrettyNoExprInlining) + + if (run) { + val maxCatLen = state.annotations.collectFirst { + case m: MaxCatLenAnnotation => m.maxCatLen + }.getOrElse(defaultMaxCatLen) + + val modulesx = state.circuit.modules.map(CombineCats.onMod(maxCatLen)) + state.copy(circuit = state.circuit.copy(modules = modulesx)) + } else { + logger.info(s"--${PrettyNoExprInlining.longOption} specified, skipping...") + state + } } } diff --git a/src/main/scala/firrtl/transforms/InlineBooleanExpressions.scala b/src/main/scala/firrtl/transforms/InlineBooleanExpressions.scala index 31d69cc4..b405f353 100644 --- a/src/main/scala/firrtl/transforms/InlineBooleanExpressions.scala +++ b/src/main/scala/firrtl/transforms/InlineBooleanExpressions.scala @@ -3,6 +3,7 @@ package firrtl package transforms +import firrtl.stage.PrettyNoExprInlining import firrtl.annotations.{NoTargetAnnotation, Target} import firrtl.annotations.TargetToken.{fromStringToTargetToken, OfModule, Ref} import firrtl.ir._ @@ -159,26 +160,33 @@ class InlineBooleanExpressions extends Transform with DependencyAPIMigration { } def execute(state: CircuitState): CircuitState = { - val dontTouchMap: Map[OfModule, Set[Ref]] = { - val refTargets = state.annotations.flatMap { - case anno: HasDontTouches => anno.dontTouches - case o => Nil - } - val dontTouches: Seq[(OfModule, Ref)] = refTargets.map { - case r => Target.referringModule(r).module.OfModule -> r.ref.Ref + val run = !state.annotations.contains(PrettyNoExprInlining) + + if (run) { + val dontTouchMap: Map[OfModule, Set[Ref]] = { + val refTargets = state.annotations.flatMap { + case anno: HasDontTouches => anno.dontTouches + case o => Nil + } + val dontTouches: Seq[(OfModule, Ref)] = refTargets.map { + case r => Target.referringModule(r).module.OfModule -> r.ref.Ref + } + dontTouches.groupBy(_._1).mapValues(_.map(_._2).toSet).toMap } - dontTouches.groupBy(_._1).mapValues(_.map(_._2).toSet).toMap - } - val maxInlineCount = state.annotations.collectFirst { - case InlineBooleanExpressionsMax(max) => max - }.getOrElse(InlineBooleanExpressions.defaultMax) + val maxInlineCount = state.annotations.collectFirst { + case InlineBooleanExpressionsMax(max) => max + }.getOrElse(InlineBooleanExpressions.defaultMax) - val modulesx = state.circuit.modules.map { m => - val mapMethods = new MapMethods(maxInlineCount, dontTouchMap.getOrElse(m.name.OfModule, Set.empty[Ref])) - m.mapStmt(mapMethods.onStmt(_)) - } + val modulesx = state.circuit.modules.map { m => + val mapMethods = new MapMethods(maxInlineCount, dontTouchMap.getOrElse(m.name.OfModule, Set.empty[Ref])) + m.mapStmt(mapMethods.onStmt(_)) + } - state.copy(circuit = state.circuit.copy(modules = modulesx)) + state.copy(circuit = state.circuit.copy(modules = modulesx)) + } else { + logger.info(s"--${PrettyNoExprInlining.longOption} specified, skipping...") + state + } } } |
