diff options
| author | Donggyu Kim | 2016-09-07 12:34:10 -0700 |
|---|---|---|
| committer | Donggyu Kim | 2016-09-07 14:26:50 -0700 |
| commit | 5697d30179a0f2e86dc618092af63e6eb997a534 (patch) | |
| tree | 6515a790f7d19cecc2823831e9fe29e5fd5a6cef /src | |
| parent | c34bb5d7acf39cad8c20c40a55693fdb373e618c (diff) | |
clean up SplitExpressions
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/scala/firrtl/passes/SplitExpressions.scala | 86 |
1 files changed, 43 insertions, 43 deletions
diff --git a/src/main/scala/firrtl/passes/SplitExpressions.scala b/src/main/scala/firrtl/passes/SplitExpressions.scala index 3b6021ed..90b92a35 100644 --- a/src/main/scala/firrtl/passes/SplitExpressions.scala +++ b/src/main/scala/firrtl/passes/SplitExpressions.scala @@ -14,53 +14,53 @@ object SplitExpressions extends Pass { private def onModule(m: Module): Module = { val namespace = Namespace(m) def onStmt(s: Statement): Statement = { - val v = mutable.ArrayBuffer[Statement]() - // Splits current expression if needed - // Adds named temporaries to v - def split(e: Expression): Expression = e match { - case e: DoPrim => { - val name = namespace.newTemp - v += DefNode(get_info(s), name, e) - WRef(name, e.tpe, kind(e), gender(e)) - } - case e: Mux => { - val name = namespace.newTemp - v += DefNode(get_info(s), name, e) - WRef(name, e.tpe, kind(e), gender(e)) - } - case e: ValidIf => { - val name = namespace.newTemp - v += DefNode(get_info(s), name, e) - WRef(name, e.tpe, kind(e), gender(e)) - } - case e => e - } - // Recursive. Splits compound nodes - def onExp(e: Expression): Expression = { - val ex = e map onExp - ex match { - case (_: DoPrim) => ex map split - case v => v - } - } - val x = s map onExp - x match { - case x: Block => x map onStmt - case EmptyStmt => x - case x => { - v += x - if (v.size > 1) Block(v.toVector) - else v(0) - } + val v = mutable.ArrayBuffer[Statement]() + // Splits current expression if needed + // Adds named temporaries to v + def split(e: Expression): Expression = e match { + case e: DoPrim => { + val name = namespace.newTemp + v += DefNode(get_info(s), name, e) + WRef(name, e.tpe, kind(e), gender(e)) + } + case e: Mux => { + val name = namespace.newTemp + v += DefNode(get_info(s), name, e) + WRef(name, e.tpe, kind(e), gender(e)) + } + case e: ValidIf => { + val name = namespace.newTemp + v += DefNode(get_info(s), name, e) + WRef(name, e.tpe, kind(e), gender(e)) + } + case e => e + } + + // Recursive. Splits compound nodes + def onExp(e: Expression): Expression = + e map onExp match { + case ex: DoPrim => ex map split + case v => v } + + s map onExp match { + case x: Block => x map onStmt + case EmptyStmt => EmptyStmt + case x => + v += x + v.size match { + case 1 => v.head + case _ => Block(v.toSeq) + } + } } Module(m.info, m.name, m.ports, onStmt(m.body)) } def run(c: Circuit): Circuit = { - val modulesx = c.modules.map( _ match { - case m: Module => onModule(m) - case m: ExtModule => m - }) - Circuit(c.info, modulesx, c.main) + val modulesx = c.modules map { + case m: Module => onModule(m) + case m: ExtModule => m + } + Circuit(c.info, modulesx, c.main) } } |
