aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/firrtl/passes
diff options
context:
space:
mode:
authorazidar2016-08-19 16:58:34 -0700
committerDonggyu Kim2016-09-07 10:58:08 -0700
commit6255d5e398ae21dbc75db907bb9a9b24bc09d2b3 (patch)
treecfff6e46fad44cc0c20eb079863b2a0d6d4aa993 /src/main/scala/firrtl/passes
parent25b4a97b5fcc2b043f2c611f63c2497b8584cf55 (diff)
Added ReplaceSubAccesses before RemoveSubAccesses
Diffstat (limited to 'src/main/scala/firrtl/passes')
-rw-r--r--src/main/scala/firrtl/passes/ReplaceSubAccess.scala32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/main/scala/firrtl/passes/ReplaceSubAccess.scala b/src/main/scala/firrtl/passes/ReplaceSubAccess.scala
new file mode 100644
index 00000000..8e911a96
--- /dev/null
+++ b/src/main/scala/firrtl/passes/ReplaceSubAccess.scala
@@ -0,0 +1,32 @@
+package firrtl.passes
+
+import firrtl.ir._
+import firrtl.{WRef, WSubAccess, WSubIndex, WSubField}
+import firrtl.Mappers._
+import firrtl.Utils._
+import firrtl.WrappedExpression._
+import firrtl.Namespace
+import scala.collection.mutable
+
+
+/** Replaces constant [[firrtl.WSubAccess]] with [[firrtl.WSubIndex]]
+ * TODO Fold in to High Firrtl Const Prop
+ */
+object ReplaceAccesses extends Pass {
+ def name = "Replace Accesses"
+
+ def run(c: Circuit): Circuit = {
+ def onStmt(s: Statement): Statement = s map onStmt map onExp
+ def onExp(e: Expression): Expression = e match {
+ case WSubAccess(e, UIntLiteral(value, width), t, g) => WSubIndex(e, value.toInt, t, g)
+ case e => e map onExp
+ }
+
+ val newModules = c.modules map {
+ case m: ExtModule => m
+ case Module(i, n, ps, b) => Module(i, n, ps, onStmt(b))
+ }
+
+ Circuit(c.info, newModules, c.main)
+ }
+}