diff options
| author | Adam Izraelevitz | 2017-12-22 19:34:39 -0500 |
|---|---|---|
| committer | Jack Koenig | 2017-12-22 16:34:39 -0800 |
| commit | 69cf8f1a084e477284d8ae48a4a7abc499e92991 (patch) | |
| tree | 6480ac7420dfc1019cafe154ac397466dda3c4db /src/main/scala/firrtl/passes/RemoveAccesses.scala | |
| parent | 19abcb04ad005a21319354550e87bfd428ec5597 (diff) | |
API change: out-of-bounds vec accesses now invalid, not first element (#685)
[skip formal checks]
Generate nicer name for remove accesses
Diffstat (limited to 'src/main/scala/firrtl/passes/RemoveAccesses.scala')
| -rw-r--r-- | src/main/scala/firrtl/passes/RemoveAccesses.scala | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/main/scala/firrtl/passes/RemoveAccesses.scala b/src/main/scala/firrtl/passes/RemoveAccesses.scala index 253e6a15..37b92a9e 100644 --- a/src/main/scala/firrtl/passes/RemoveAccesses.scala +++ b/src/main/scala/firrtl/passes/RemoveAccesses.scala @@ -15,10 +15,12 @@ import scala.collection.mutable */ object RemoveAccesses extends Pass { private def AND(e1: Expression, e2: Expression) = - DoPrim(And, Seq(e1, e2), Nil, BoolType) + if(e1 == one) e2 + else if(e2 == one) e1 + else DoPrim(And, Seq(e1, e2), Nil, BoolType) private def EQV(e1: Expression, e2: Expression): Expression = - DoPrim(Eq, Seq(e1, e2), Nil, e1.tpe) + DoPrim(Eq, Seq(e1, e2), Nil, BoolType) /** Container for a base expression and its corresponding guard */ @@ -82,7 +84,7 @@ object RemoveAccesses extends Pass { val namespace = Namespace(m) def onStmt(s: Statement): Statement = { def create_temp(e: Expression): (Statement, Expression) = { - val n = namespace.newTemp + val n = namespace.newName(niceName(e)) (DefWire(get_info(s), n, e.tpe), WRef(n, e.tpe, kind(e), gender(e))) } @@ -101,7 +103,8 @@ object RemoveAccesses extends Pass { stmts += wire rs.zipWithIndex foreach { case (x, i) if i < temps.size => - stmts += Connect(get_info(s),getTemp(i),x.base) + stmts += IsInvalid(get_info(s),getTemp(i)) + stmts += Conditionally(get_info(s),x.guard,Connect(get_info(s),getTemp(i),x.base),EmptyStmt) case (x, i) => stmts += Conditionally(get_info(s),x.guard,Connect(get_info(s),getTemp(i),x.base),EmptyStmt) } |
