aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorJack Koenig2017-06-28 17:52:56 -0700
committerJack Koenig2017-06-28 17:52:56 -0700
commit39665e1f74cfe8243067442cccf4e7eab66ade68 (patch)
tree8ba403e298c39bc6104f32a93754079dc458752a /src/main
parent818cfde4ad42ffa9ee30d0f9ae72533ede80e4ce (diff)
Promote ConstProp to a transform
Diffstat (limited to 'src/main')
-rw-r--r--src/main/scala/firrtl/LoweringCompilers.scala6
-rw-r--r--src/main/scala/firrtl/transforms/ConstantPropagation.scala (renamed from src/main/scala/firrtl/passes/ConstProp.scala)12
2 files changed, 13 insertions, 5 deletions
diff --git a/src/main/scala/firrtl/LoweringCompilers.scala b/src/main/scala/firrtl/LoweringCompilers.scala
index 66ae1673..8dd9b180 100644
--- a/src/main/scala/firrtl/LoweringCompilers.scala
+++ b/src/main/scala/firrtl/LoweringCompilers.scala
@@ -98,12 +98,12 @@ class LowFirrtlOptimization extends CoreTransform {
def outputForm = LowForm
def transforms = Seq(
passes.RemoveValidIf,
- passes.ConstProp,
+ new firrtl.transforms.ConstantPropagation,
passes.PadWidths,
- passes.ConstProp,
+ new firrtl.transforms.ConstantPropagation,
passes.Legalize,
passes.memlib.VerilogMemDelays, // TODO move to Verilog emitter
- passes.ConstProp,
+ new firrtl.transforms.ConstantPropagation,
passes.SplitExpressions,
passes.CommonSubexpressionElimination,
new firrtl.transforms.DeadCodeElimination)
diff --git a/src/main/scala/firrtl/passes/ConstProp.scala b/src/main/scala/firrtl/transforms/ConstantPropagation.scala
index f2aa1a03..930fe45a 100644
--- a/src/main/scala/firrtl/passes/ConstProp.scala
+++ b/src/main/scala/firrtl/transforms/ConstantPropagation.scala
@@ -1,6 +1,7 @@
// See LICENSE for license details.
-package firrtl.passes
+package firrtl
+package transforms
import firrtl._
import firrtl.ir._
@@ -10,7 +11,10 @@ import firrtl.PrimOps._
import annotation.tailrec
-object ConstProp extends Pass {
+class ConstantPropagation extends Transform {
+ def inputForm = LowForm
+ def outputForm = LowForm
+
private def pad(e: Expression, t: Type) = (bitWidth(e.tpe), bitWidth(t)) match {
case (we, wt) if we < wt => DoPrim(Pad, Seq(e), Seq(wt), t)
case (we, wt) if we == wt => e
@@ -292,4 +296,8 @@ object ConstProp extends Pass {
}
Circuit(c.info, modulesx, c.main)
}
+
+ def execute(state: CircuitState): CircuitState = {
+ state.copy(circuit = run(state.circuit))
+ }
}