diff options
| author | Adam Izraelevitz | 2017-03-21 15:13:35 -0700 |
|---|---|---|
| committer | Adam Izraelevitz | 2017-03-22 11:32:39 -0700 |
| commit | 0c49cfecfcf7831ee3df20b986585942b5cc9812 (patch) | |
| tree | bac9212aaf78ca8c85c6ef67b45e9bac644199d7 /src/main/scala | |
| parent | 673610d261208aa3c01a21eb0becd2b2a83fe48e (diff) | |
Fixed zero width perf bug #502
Now remove DefNodes of zero width
Don't deeply walk nodes (was the source of the bug)
Diffstat (limited to 'src/main/scala')
| -rw-r--r-- | src/main/scala/firrtl/passes/ZeroWidth.scala | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/main/scala/firrtl/passes/ZeroWidth.scala b/src/main/scala/firrtl/passes/ZeroWidth.scala index 8638ea68..a50fdc16 100644 --- a/src/main/scala/firrtl/passes/ZeroWidth.scala +++ b/src/main/scala/firrtl/passes/ZeroWidth.scala @@ -36,18 +36,22 @@ object ZeroWidth extends Pass { (e map replaceType) map onExp } private def onStmt(s: Statement): Statement = s match { - case sx: IsDeclaration => + case (_: DefWire| _: DefRegister| _: DefMemory) => var removed = false def applyRemoveZero(t: Type): Type = removeZero(t) match { case None => removed = true; t case Some(tx) => tx } - val sxx = (sx map onExp) map applyRemoveZero + val sxx = (s map onExp) map applyRemoveZero if(removed) EmptyStmt else sxx case Connect(info, loc, exp) => removeZero(loc.tpe) match { case None => EmptyStmt case Some(t) => Connect(info, loc, onExp(exp)) } + case DefNode(info, name, value) => removeZero(value.tpe) match { + case None => EmptyStmt + case Some(t) => s + } case sx => sx map onStmt } private def onModule(m: DefModule): DefModule = { |
