aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorAngie Wang2016-09-12 11:09:45 -0700
committerAdam Izraelevitz2016-09-12 11:09:45 -0700
commit20ff9c96a7c07df8e0cb91444f223384261d35fe (patch)
tree203d7f777bb101c764270886e4b466f3fc45ce25 /src/main
parent2010bc4fc7ae1b2f263505ab069dcf1b7c0f56af (diff)
Bug fix -- remove all empty expressions after ReplSeqMem passes (#294)
* Bug fix -- remove all empty expressions after ReplSeqMem passes * Added test to make sure ReplSeqMem can handle BundleType SMem (EmptyExpression leakage)
Diffstat (limited to 'src/main')
-rw-r--r--src/main/scala/firrtl/passes/UpdateDuplicateMemMacros.scala20
1 files changed, 15 insertions, 5 deletions
diff --git a/src/main/scala/firrtl/passes/UpdateDuplicateMemMacros.scala b/src/main/scala/firrtl/passes/UpdateDuplicateMemMacros.scala
index d71b8ab8..81684d90 100644
--- a/src/main/scala/firrtl/passes/UpdateDuplicateMemMacros.scala
+++ b/src/main/scala/firrtl/passes/UpdateDuplicateMemMacros.scala
@@ -43,13 +43,23 @@ object MemTransformUtils {
}
def updateStmtRefs(s: Statement, repl: Map[String, Expression]): Statement = {
- def updateRef(e: Expression): Expression = e map updateRef match {
- case e: WSubField => repl getOrElse (e.serialize, e)
- case e => e
+ def updateRef(e: Expression): Expression = e map updateRef match {
+ case e => repl getOrElse (e.serialize, e)
+ }
+ def hasEmptyExpr(stmt: Statement): Boolean = {
+ var foundEmpty = false
+ def testEmptyExpr(e: Expression): Expression = {
+ e map testEmptyExpr match {
+ case EmptyExpression => foundEmpty = true
+ case _ =>
+ }
+ e // map must return; no foreach
+ }
+ stmt map testEmptyExpr
+ foundEmpty
}
def updateStmtRefs(s: Statement): Statement = s map updateStmtRefs map updateRef match {
- case Connect(info, EmptyExpression, exp) => EmptyStmt
- case Connect(info, WSubIndex(EmptyExpression, _, _, _), exp) => EmptyStmt
+ case c: Connect if hasEmptyExpr(c) => EmptyStmt
case s => s
}
updateStmtRefs(s)