aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJack Koenig2019-12-27 08:30:14 -0800
committerJack Koenig2019-12-30 21:24:24 -0800
commit4fd2e6e98917f1d6424453b878f357756840a819 (patch)
tree0fadfee680d4af890d89c6c67667e538f18dba5b /src
parent1f63318b849012ba5655ac26774db383cf57f37d (diff)
Minor code cleansup in InferResets
* Move Map lookup into closure so it only occurs if necessary * Replace gender with flow and improve code clarity
Diffstat (limited to 'src')
-rw-r--r--src/main/scala/firrtl/transforms/InferResets.scala19
1 files changed, 9 insertions, 10 deletions
diff --git a/src/main/scala/firrtl/transforms/InferResets.scala b/src/main/scala/firrtl/transforms/InferResets.scala
index ea5b3092..fbc915e2 100644
--- a/src/main/scala/firrtl/transforms/InferResets.scala
+++ b/src/main/scala/firrtl/transforms/InferResets.scala
@@ -108,19 +108,18 @@ class InferResets extends Transform {
def onStmt(map: DriverMap)(stmt: Statement): Unit = {
// Mark driver of a ResetType leaf
def markResetDriver(lhs: Expression, rhs: Expression): Unit = {
- val lflip = Utils.to_flip(Utils.gender(lhs))
- if ((lflip == Default && lhs.tpe == ResetType) ||
- (lflip == Flip && rhs.tpe == ResetType)) {
- val (loc, exp) = lflip match {
- case Default => (lhs, rhs)
- case Flip => (rhs, lhs)
- }
- val target = makeTarget(loc)
+ val con = Utils.flow(lhs) match {
+ case SinkFlow if lhs.tpe == ResetType => Some((lhs, rhs))
+ case SourceFlow if rhs.tpe == ResetType => Some((rhs, lhs))
+ // If sink is not ResetType, do nothing
+ case _ => None
+ }
+ con.foreach { case (loc, exp) =>
val driver = exp.tpe match {
case ResetType => TargetDriver(makeTarget(exp))
case tpe => TypeDriver(tpe, () => makeTarget(exp))
}
- map(target) = driver :: Nil
+ map(makeTarget(loc)) = driver :: Nil
}
}
stmt match {
@@ -181,8 +180,8 @@ class InferResets extends Transform {
val res = mutable.Map[ReferenceTarget, Type]()
val errors = new Errors
def rec(target: ReferenceTarget): Type = {
- val drivers = map.getOrElse(target, Nil)
res.getOrElseUpdate(target, {
+ val drivers = map.getOrElse(target, Nil)
val tpes = drivers.flatMap {
case TargetDriver(t) => Some(TypeDriver(rec(t), () => t))
case td: TypeDriver => Some(td)