diff options
| author | Adam Izraelevitz | 2017-05-10 11:23:18 -0700 |
|---|---|---|
| committer | GitHub | 2017-05-10 11:23:18 -0700 |
| commit | 8b8eb4eac5b353d4d632065c78faf6a706d6aae8 (patch) | |
| tree | 39e2d9344166b61b376df9d3cd15a4787bcd01f4 /src/main/scala/firrtl/passes/DeadCodeElimination.scala | |
| parent | af222c1737fa72fce964190876346bdb7ff220cd (diff) | |
Update rename2 (#478)
* Added pass name to debug logger
* Addresses #459. Rewords transform annotations API.
Now, any annotation not propagated by a transform is considered deleted.
A new DeletedAnnotation is added in place of it.
* Added more stylized debugging style
* WIP: make pass transform
* WIP: All tests pass, need to pull master
* Cleaned up PR
* Added rename updates to all core transforms
* Added more rename tests, and bugfixes
* Renaming tracks non-leaf subfields
E.g. given:
wire x: {a: UInt<1>, b: UInt<1>[2]}
Annotating x.b will eventually annotate x_b_0 and x_b_1
* Bugfix instance rename lowering broken
* Address review comments
* Remove check for seqTransform, UnknownForm too restrictive check
Diffstat (limited to 'src/main/scala/firrtl/passes/DeadCodeElimination.scala')
| -rw-r--r-- | src/main/scala/firrtl/passes/DeadCodeElimination.scala | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/src/main/scala/firrtl/passes/DeadCodeElimination.scala b/src/main/scala/firrtl/passes/DeadCodeElimination.scala index 9f249f35..54ac76fe 100644 --- a/src/main/scala/firrtl/passes/DeadCodeElimination.scala +++ b/src/main/scala/firrtl/passes/DeadCodeElimination.scala @@ -9,8 +9,10 @@ import firrtl.Mappers._ import annotation.tailrec -object DeadCodeElimination extends Pass { - private def dceOnce(s: Statement): (Statement, Long) = { +object DeadCodeElimination extends Transform { + def inputForm = UnknownForm + def outputForm = UnknownForm + private def dceOnce(renames: RenameMap)(s: Statement): (Statement, Long) = { val referenced = collection.mutable.HashSet[String]() var nEliminated = 0L @@ -28,6 +30,7 @@ object DeadCodeElimination extends Pass { if (referenced(name)) x else { nEliminated += 1 + renames.delete(name) EmptyStmt } @@ -43,16 +46,22 @@ object DeadCodeElimination extends Pass { } @tailrec - private def dce(s: Statement): Statement = { - val (res, n) = dceOnce(s) - if (n > 0) dce(res) else res + private def dce(renames: RenameMap)(s: Statement): Statement = { + val (res, n) = dceOnce(renames)(s) + if (n > 0) dce(renames)(res) else res } - def run(c: Circuit): Circuit = { + def execute(state: CircuitState): CircuitState = { + val c = state.circuit + val renames = RenameMap() + renames.setCircuit(c.main) val modulesx = c.modules.map { case m: ExtModule => m - case m: Module => Module(m.info, m.name, m.ports, dce(m.body)) + case m: Module => + renames.setModule(m.name) + Module(m.info, m.name, m.ports, dce(renames)(m.body)) } - Circuit(c.info, modulesx, c.main) + val result = Circuit(c.info, modulesx, c.main) + CircuitState(result, outputForm, state.annotations, Some(renames)) } } |
