diff options
| author | Donggyu Kim | 2016-08-26 02:48:55 -0700 |
|---|---|---|
| committer | Donggyu Kim | 2016-09-08 13:33:41 -0700 |
| commit | 864a3978cf94f336187831773dfc2c9f9ea064c8 (patch) | |
| tree | 6f11b15ed7516bc8816ec0d45f505dd0e4014613 /src | |
| parent | 488aec3a35b6fa99a8150702128c9c1e87246644 (diff) | |
memoize nodes in ExpandWhens
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/scala/firrtl/passes/ExpandWhens.scala | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/main/scala/firrtl/passes/ExpandWhens.scala b/src/main/scala/firrtl/passes/ExpandWhens.scala index e02e2bf0..7c013b51 100644 --- a/src/main/scala/firrtl/passes/ExpandWhens.scala +++ b/src/main/scala/firrtl/passes/ExpandWhens.scala @@ -45,6 +45,7 @@ import annotation.tailrec */ object ExpandWhens extends Pass { def name = "Expand Whens" + type NodeMap = collection.mutable.HashMap[MemoizedHash[Expression], String] type Netlist = collection.mutable.LinkedHashMap[WrappedExpression, Expression] type Simlist = collection.mutable.ArrayBuffer[Statement] type Defaults = Seq[collection.mutable.Map[WrappedExpression, Expression]] @@ -88,6 +89,7 @@ object ExpandWhens extends Pass { def expandWhens(m: Module): (Netlist, Simlist, Statement) = { val namespace = Namespace(m) val simlist = new Simlist + val nodes = new NodeMap // defaults ideally would be immutable.Map but conversion from mutable.LinkedHashMap to mutable.Map is VERY slow def expandWhens(netlist: Netlist, @@ -133,10 +135,16 @@ object ExpandWhens extends Pass { conseqNetlist getOrElse (lvalue, altNetlist(lvalue)) } - val memoNode = DefNode(s.info, namespace.newTemp, res) - val memoExpr = WRef(memoNode.name, res.tpe, NodeKind(), MALE) - netlist(lvalue) = memoExpr - memoNode + nodes get res match { + case Some(name) => + netlist(lvalue) = WRef(name, res.tpe, NodeKind(), MALE) + EmptyStmt + case None => + val name = namespace.newTemp + nodes(res) = name + netlist(lvalue) = WRef(name, res.tpe, NodeKind(), MALE) + DefNode(s.info, name, res) + } } Block(Seq(conseqStmt, altStmt) ++ memos) case s: Print => |
