aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/firrtl/passes/DeadCodeElimination.scala
diff options
context:
space:
mode:
authorAdam Izraelevitz2017-05-10 11:23:18 -0700
committerGitHub2017-05-10 11:23:18 -0700
commit8b8eb4eac5b353d4d632065c78faf6a706d6aae8 (patch)
tree39e2d9344166b61b376df9d3cd15a4787bcd01f4 /src/main/scala/firrtl/passes/DeadCodeElimination.scala
parentaf222c1737fa72fce964190876346bdb7ff220cd (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.scala25
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))
}
}