aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorJack Koenig2020-09-06 12:33:57 -0700
committerGitHub2020-09-06 12:33:57 -0700
commite420f99d87ece9f56504b3afc2e37d40b6e8c7b1 (patch)
treeb5b0bd58912cdc28dc7d7abe34cde812c6e1c755 /src/main
parentb6de1491af7ba88bb778aaeeba369b6b87151f9e (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')
-rw-r--r--src/main/scala/firrtl/stage/FirrtlAnnotations.scala21
-rw-r--r--src/main/scala/firrtl/stage/FirrtlCli.scala3
-rw-r--r--src/main/scala/firrtl/stage/package.scala3
-rw-r--r--src/main/scala/firrtl/stage/transforms/CheckScalaVersion.scala6
-rw-r--r--src/main/scala/firrtl/transforms/CombineCats.scala20
-rw-r--r--src/main/scala/firrtl/transforms/InlineBooleanExpressions.scala42
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
+ }
}
}