diff options
| author | Jack Koenig | 2018-10-31 14:59:40 -0700 |
|---|---|---|
| committer | Jack Koenig | 2018-10-31 15:22:26 -0700 |
| commit | 9bc2e6daaf3a3a08aefe485aa924c820689de981 (patch) | |
| tree | 5626a130bc1607e6a4c68eec864b7944f3a322e8 /src/main | |
| parent | 8d599182114306f77d098ba7effa836328b1e802 (diff) | |
Remove all uses of get_flip and deprecate
It is O(n) and every use is in an O(n) iteration resulting in O(n^2).
Same information can be extracted from create_exps which happens to also
be called at every use of get_flip.
Diffstat (limited to 'src/main')
| -rw-r--r-- | src/main/scala/firrtl/Utils.scala | 1 | ||||
| -rw-r--r-- | src/main/scala/firrtl/passes/ExpandWhens.scala | 5 | ||||
| -rw-r--r-- | src/main/scala/firrtl/passes/InferWidths.scala | 8 | ||||
| -rw-r--r-- | src/main/scala/firrtl/passes/Passes.scala | 6 |
4 files changed, 10 insertions, 10 deletions
diff --git a/src/main/scala/firrtl/Utils.scala b/src/main/scala/firrtl/Utils.scala index 53e8c157..44b16bf8 100644 --- a/src/main/scala/firrtl/Utils.scala +++ b/src/main/scala/firrtl/Utils.scala @@ -300,6 +300,7 @@ object Utils extends LazyLogging { onExp(expression) ReferenceTarget(main, module, Nil, ref, tokens) } + @deprecated("get_flip is fundamentally slow, use to_flip(gender(expr))", "1.2") def get_flip(t: Type, i: Int, f: Orientation): Orientation = { if (i >= get_size(t)) throwInternalError(s"get_flip: shouldn't be here - $i >= get_size($t)") t match { diff --git a/src/main/scala/firrtl/passes/ExpandWhens.scala b/src/main/scala/firrtl/passes/ExpandWhens.scala index 964b8494..9136c913 100644 --- a/src/main/scala/firrtl/passes/ExpandWhens.scala +++ b/src/main/scala/firrtl/passes/ExpandWhens.scala @@ -204,12 +204,11 @@ object ExpandWhens extends Pass { /** Returns all references to all Female leaf subcomponents of a reference */ private def getFemaleRefs(n: String, t: Type, g: Gender): Seq[Expression] = { - def getGender(t: Type, i: Int, g: Gender): Gender = times(g, get_flip(t, i, Default)) val exps = create_exps(WRef(n, t, ExpKind, g)) - exps.zipWithIndex.flatMap { case (exp, j) => + exps.flatMap { case exp => exp.tpe match { case AnalogType(w) => None - case _ => getGender(t, j, g) match { + case _ => gender(exp) match { case (BIGENDER | FEMALE) => Some(exp) case _ => None } diff --git a/src/main/scala/firrtl/passes/InferWidths.scala b/src/main/scala/firrtl/passes/InferWidths.scala index 1e9532c8..26d346bb 100644 --- a/src/main/scala/firrtl/passes/InferWidths.scala +++ b/src/main/scala/firrtl/passes/InferWidths.scala @@ -263,12 +263,12 @@ object InferWidths extends Pass { val n = get_size(s.loc.tpe) val locs = create_exps(s.loc) val exps = create_exps(s.expr) - v ++= ((locs zip exps).zipWithIndex flatMap {case ((locx, expx), i) => - get_flip(s.loc.tpe, i, Default) match { + v ++= locs.zip(exps).flatMap { case (locx, expx) => + to_flip(gender(locx)) match { case Default => get_constraints_t(locx.tpe, expx.tpe)//WGeq(getWidth(locx), getWidth(expx)) case Flip => get_constraints_t(expx.tpe, locx.tpe)//WGeq(getWidth(expx), getWidth(locx)) } - }) + } case (s: PartialConnect) => val ls = get_valid_points(s.loc.tpe, s.expr.tpe, Default, Default) val locs = create_exps(s.loc) @@ -276,7 +276,7 @@ object InferWidths extends Pass { v ++= (ls flatMap {case (x, y) => val locx = locs(x) val expx = exps(y) - get_flip(s.loc.tpe, x, Default) match { + to_flip(gender(locx)) match { case Default => get_constraints_t(locx.tpe, expx.tpe)//WGeq(getWidth(locx), getWidth(expx)) case Flip => get_constraints_t(expx.tpe, locx.tpe)//WGeq(getWidth(expx), getWidth(locx)) } diff --git a/src/main/scala/firrtl/passes/Passes.scala b/src/main/scala/firrtl/passes/Passes.scala index 45413348..bb65201b 100644 --- a/src/main/scala/firrtl/passes/Passes.scala +++ b/src/main/scala/firrtl/passes/Passes.scala @@ -140,8 +140,8 @@ object ExpandConnects extends Pass { case sx: Connect => val locs = create_exps(sx.loc) val exps = create_exps(sx.expr) - Block((locs zip exps).zipWithIndex map {case ((locx, expx), i) => - get_flip(sx.loc.tpe, i, Default) match { + Block(locs.zip(exps).map { case (locx, expx) => + to_flip(gender(locx)) match { case Default => Connect(sx.info, locx, expx) case Flip => Connect(sx.info, expx, locx) } @@ -154,7 +154,7 @@ object ExpandConnects extends Pass { locs(x).tpe match { case AnalogType(_) => Attach(sx.info, Seq(locs(x), exps(y))) case _ => - get_flip(sx.loc.tpe, x, Default) match { + to_flip(gender(locs(x))) match { case Default => Connect(sx.info, locs(x), exps(y)) case Flip => Connect(sx.info, exps(y), locs(x)) } |
