aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrew Waterman2016-04-13 14:51:47 -0700
committerAndrew Waterman2016-04-14 15:45:42 -0700
commit30091a8a9f965502c96926591af0cc95a5e3c746 (patch)
tree58f978fc975c563bb82eef771a155e6844b08b63 /src
parent3adf138536e47196c076befe614b4f34e41c73ef (diff)
Factor DCE re-running more cleanly
Diffstat (limited to 'src')
-rw-r--r--src/main/scala/firrtl/passes/DeadCodeElimination.scala12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/main/scala/firrtl/passes/DeadCodeElimination.scala b/src/main/scala/firrtl/passes/DeadCodeElimination.scala
index 98ef296e..cb772556 100644
--- a/src/main/scala/firrtl/passes/DeadCodeElimination.scala
+++ b/src/main/scala/firrtl/passes/DeadCodeElimination.scala
@@ -36,8 +36,7 @@ import annotation.tailrec
object DeadCodeElimination extends Pass {
def name = "Dead Code Elimination"
- @tailrec
- private def dce(s: Stmt): Stmt = {
+ private def dceOnce(s: Stmt): (Stmt, Long) = {
val referenced = collection.mutable.HashSet[String]()
var nEliminated = 0L
@@ -66,8 +65,13 @@ object DeadCodeElimination extends Pass {
}
checkUse(s)
- val res = removeUnused(s)
- if (nEliminated > 0) dce(res) else res
+ (removeUnused(s), nEliminated)
+ }
+
+ @tailrec
+ private def dce(s: Stmt): Stmt = {
+ val (res, n) = dceOnce(s)
+ if (n > 0) dce(res) else res
}
def run(c: Circuit): Circuit = {