aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/scala/firrtl/passes/RemoveValidIf.scala26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/main/scala/firrtl/passes/RemoveValidIf.scala b/src/main/scala/firrtl/passes/RemoveValidIf.scala
new file mode 100644
index 00000000..4bc6162a
--- /dev/null
+++ b/src/main/scala/firrtl/passes/RemoveValidIf.scala
@@ -0,0 +1,26 @@
+package firrtl
+package passes
+import firrtl.Mappers.{ExpMap, StmtMap}
+
+// Removes ValidIf as an optimization
+object RemoveValidIf extends Pass {
+ def name = "Remove ValidIfs"
+ // Recursive. Removes ValidIf's
+ private def onExp(e: Expression): Expression = {
+ e map onExp match {
+ case ValidIf(cond, value, tpe) => value
+ case x => x
+ }
+ }
+ // Recursive.
+ private def onStmt(s: Stmt): Stmt = s map onStmt map onExp
+
+ private def onModule(m: Module): Module = {
+ m match {
+ case m:InModule => InModule(m.info, m.name, m.ports, onStmt(m.body))
+ case m:ExModule => m
+ }
+ }
+
+ def run(c: Circuit): Circuit = Circuit(c.info, c.modules.map(onModule _), c.main)
+}