From 30091a8a9f965502c96926591af0cc95a5e3c746 Mon Sep 17 00:00:00 2001 From: Andrew Waterman Date: Wed, 13 Apr 2016 14:51:47 -0700 Subject: Factor DCE re-running more cleanly --- src/main/scala/firrtl/passes/DeadCodeElimination.scala | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'src') 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 = { -- cgit v1.2.3