diff options
| author | Andrew Waterman | 2016-04-13 14:51:47 -0700 |
|---|---|---|
| committer | Andrew Waterman | 2016-04-14 15:45:42 -0700 |
| commit | 30091a8a9f965502c96926591af0cc95a5e3c746 (patch) | |
| tree | 58f978fc975c563bb82eef771a155e6844b08b63 /src | |
| parent | 3adf138536e47196c076befe614b4f34e41c73ef (diff) | |
Factor DCE re-running more cleanly
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/scala/firrtl/passes/DeadCodeElimination.scala | 12 |
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 = { |
