diff options
| -rw-r--r-- | src/main/scala/firrtl/transforms/DeadCodeElimination.scala | 37 |
1 files changed, 34 insertions, 3 deletions
diff --git a/src/main/scala/firrtl/transforms/DeadCodeElimination.scala b/src/main/scala/firrtl/transforms/DeadCodeElimination.scala index 578de264..22e7da6e 100644 --- a/src/main/scala/firrtl/transforms/DeadCodeElimination.scala +++ b/src/main/scala/firrtl/transforms/DeadCodeElimination.scala @@ -180,6 +180,24 @@ class DeadCodeElimination extends Transform { moduleMap: collection.Map[String, DefModule], renames: RenameMap) (mod: DefModule): Option[DefModule] = { + // For log-level debug + def deleteMsg(decl: IsDeclaration): String = { + val tpe = decl match { + case _: DefNode => "node" + case _: DefRegister => "reg" + case _: DefWire => "wire" + case _: Port => "port" + case _: DefMemory => "mem" + case (_: DefInstance | _: WDefInstance) => "inst" + case _: Module => "module" + case _: ExtModule => "extmodule" + } + val ref = decl match { + case (_: Module | _: ExtModule) => mod.name + case _ => s"${mod.name}.${decl.name}" + } + s"[DCE] $tpe $ref" + } def getDeps(expr: Expression): Seq[LogicNode] = getDepsImpl(mod.name, instMap)(expr) var emptyBody = true @@ -191,12 +209,14 @@ class DeadCodeElimination extends Transform { moduleMap.get(inst.module) match { case Some(instMod) => inst.copy(tpe = Utils.module_type(instMod)) case None => + logger.debug(deleteMsg(inst)) renames.delete(inst.name) EmptyStmt } case decl: IsDeclaration => val node = LogicNode(mod.name, decl.name) if (deadNodes.contains(node)) { + logger.debug(deleteMsg(decl)) renames.delete(decl.name) EmptyStmt } @@ -221,14 +241,25 @@ class DeadCodeElimination extends Transform { } val (deadPorts, portsx) = mod.ports.partition(p => deadNodes.contains(LogicNode(mod.name, p.name))) - deadPorts.foreach(p => renames.delete(p.name)) + deadPorts.foreach { p => + logger.debug(deleteMsg(p)) + renames.delete(p.name) + } mod match { case Module(info, name, _, body) => val bodyx = onStmt(body) - if (emptyBody && portsx.isEmpty) None else Some(Module(info, name, portsx, bodyx)) + if (emptyBody && portsx.isEmpty) { + logger.debug(deleteMsg(mod)) + None + } else { + Some(Module(info, name, portsx, bodyx)) + } case ext: ExtModule => - if (portsx.isEmpty) None + if (portsx.isEmpty) { + logger.debug(deleteMsg(mod)) + None + } else { if (ext.ports != portsx) throwInternalError // Sanity check Some(ext.copy(ports = portsx)) |
