diff options
| author | Kevin Laeufer | 2020-08-05 13:35:41 -0700 |
|---|---|---|
| committer | GitHub | 2020-08-05 20:35:41 +0000 |
| commit | b1ec7cd70ab267cd30d8421651625ba1d9a623ff (patch) | |
| tree | 237c666247aa285719d38bb46ea3445f0d880703 /src/main/scala/firrtl/transforms | |
| parent | 687f3ddbbcd9217542a4bc0e2c256559d2c67a5b (diff) | |
Deprecate InstanceGraph (#1800)
* InstanceKeyGraph: add staticInstanceCount, getGraph and getChildrenInstanceMap
* InstanceKeyGraph: reachableModules, unreachableModules, lowestCommonAncestor and fullHierarchy
* Replace usage of InstanceGraph with InstanceKeyGraph
Also deprecates all unused methods.
* WiringUtils: make new version of sinksToSources package private
This will make our live easier next time we need to change it.
* CircuitGraph: use InstanceKeyGraph
* InstanceKeyGraphSpec: respect maximum line width
* InstanceKeyGraph: make constructor private
* InstanceKeyGraph: move lowestCommonAncestor function to Wiring
* WiringUtils: update deprecation message
Diffstat (limited to 'src/main/scala/firrtl/transforms')
7 files changed, 21 insertions, 19 deletions
diff --git a/src/main/scala/firrtl/transforms/CheckCombLoops.scala b/src/main/scala/firrtl/transforms/CheckCombLoops.scala index dbfd5cf8..6403be23 100644 --- a/src/main/scala/firrtl/transforms/CheckCombLoops.scala +++ b/src/main/scala/firrtl/transforms/CheckCombLoops.scala @@ -11,7 +11,7 @@ import firrtl.traversals.Foreachers._ import firrtl.annotations._ import firrtl.Utils.throwInternalError import firrtl.graph._ -import firrtl.analyses.InstanceGraph +import firrtl.analyses.InstanceKeyGraph import firrtl.options.{Dependency, RegisteredTransform, ShellOption} /** @@ -241,7 +241,7 @@ class CheckCombLoops extends Transform case ann: Annotation => CircuitTarget(c.main) } val moduleMap = c.modules.map({m => (m.name,m) }).toMap - val iGraph = new InstanceGraph(c).graph + val iGraph = InstanceKeyGraph(c).graph val moduleDeps = iGraph.getEdgeMap.map({ case (k,v) => (k.module, (v map { i => (i.name, i.module) }).toMap) }).toMap val topoSortedModules = iGraph.transformNodes(_.module).linearize.reverse map { moduleMap(_) } val moduleGraphs = new mutable.HashMap[String, ConnMap] diff --git a/src/main/scala/firrtl/transforms/ConstantPropagation.scala b/src/main/scala/firrtl/transforms/ConstantPropagation.scala index c3c615e0..ce36dd72 100644 --- a/src/main/scala/firrtl/transforms/ConstantPropagation.scala +++ b/src/main/scala/firrtl/transforms/ConstantPropagation.scala @@ -11,7 +11,7 @@ import firrtl.Utils._ import firrtl.Mappers._ import firrtl.PrimOps._ import firrtl.graph.DiGraph -import firrtl.analyses.InstanceGraph +import firrtl.analyses.InstanceKeyGraph import firrtl.annotations.TargetToken.Ref import firrtl.options.Dependency @@ -739,8 +739,8 @@ class ConstantPropagation extends Transform with DependencyAPIMigration with Res private def run(c: Circuit, dontTouchMap: Map[OfModule, Set[String]]): Circuit = { - val iGraph = new InstanceGraph(c) - val moduleDeps = iGraph.getChildrenInstanceMap + val iGraph = InstanceKeyGraph(c) + val moduleDeps = iGraph.getChildInstanceMap val instCount = iGraph.staticInstanceCount // DiGraph using Module names as nodes, destination of edge is a parent Module diff --git a/src/main/scala/firrtl/transforms/DeadCodeElimination.scala b/src/main/scala/firrtl/transforms/DeadCodeElimination.scala index f9e35818..c883bdfb 100644 --- a/src/main/scala/firrtl/transforms/DeadCodeElimination.scala +++ b/src/main/scala/firrtl/transforms/DeadCodeElimination.scala @@ -6,7 +6,7 @@ import firrtl.ir._ import firrtl.passes._ import firrtl.annotations._ import firrtl.graph._ -import firrtl.analyses.InstanceGraph +import firrtl.analyses.InstanceKeyGraph import firrtl.Mappers._ import firrtl.Utils.{throwInternalError, kind} import firrtl.MemoizedHash._ @@ -314,7 +314,7 @@ class DeadCodeElimination extends Transform doTouchExtMods: Set[String]): CircuitState = { val c = state.circuit val moduleMap = c.modules.map(m => m.name -> m).toMap - val iGraph = new InstanceGraph(c) + val iGraph = InstanceKeyGraph(c) val moduleDeps = iGraph.graph.getEdgeMap.map({ case (k,v) => k.module -> v.map(i => i.name -> i.module).toMap }) diff --git a/src/main/scala/firrtl/transforms/Dedup.scala b/src/main/scala/firrtl/transforms/Dedup.scala index 30558129..627af11f 100644 --- a/src/main/scala/firrtl/transforms/Dedup.scala +++ b/src/main/scala/firrtl/transforms/Dedup.scala @@ -157,7 +157,7 @@ class DedupModules extends Transform with DependencyAPIMigration { moduleRenameMap.recordAll(map) // Build instanceify renaming map - val instanceGraph = new InstanceKeyGraph(c) + val instanceGraph = InstanceKeyGraph(c) val instanceify = RenameMap() val moduleName2Index = c.modules.map(_.name).zipWithIndex.map { case (n, i) => { @@ -467,7 +467,7 @@ object DedupModules extends LazyLogging { renameMap: RenameMap): Map[String, DefModule] = { val (moduleMap, moduleLinearization) = { - val iGraph = new InstanceKeyGraph(circuit) + val iGraph = InstanceKeyGraph(circuit) (iGraph.moduleMap, iGraph.moduleOrder.reverse) } val main = circuit.main diff --git a/src/main/scala/firrtl/transforms/ManipulateNames.scala b/src/main/scala/firrtl/transforms/ManipulateNames.scala index ea988e72..f15b546f 100644 --- a/src/main/scala/firrtl/transforms/ManipulateNames.scala +++ b/src/main/scala/firrtl/transforms/ManipulateNames.scala @@ -3,7 +3,7 @@ package firrtl.transforms import firrtl._ -import firrtl.analyses.InstanceGraph +import firrtl.analyses.InstanceKeyGraph import firrtl.Mappers._ import firrtl.annotations.{ @@ -422,7 +422,7 @@ abstract class ManipulateNames[A <: ManipulateNames[_] : ClassTag] extends Trans * roots ensures that the rename map is safe for parents to blindly consult. Store this in mapping of old module * target to new module to allow the modules to be put in the old order. */ - val modulesx: Map[ModuleTarget, ir.DefModule] = new InstanceGraph(c).moduleOrder.reverse + val modulesx: Map[ModuleTarget, ir.DefModule] = InstanceKeyGraph(c).moduleOrder.reverse .map(m => t.module(m.name) -> onModule(m, r, t)) .toMap diff --git a/src/main/scala/firrtl/transforms/RenameModules.scala b/src/main/scala/firrtl/transforms/RenameModules.scala index edd9fefb..d37f8c39 100644 --- a/src/main/scala/firrtl/transforms/RenameModules.scala +++ b/src/main/scala/firrtl/transforms/RenameModules.scala @@ -2,7 +2,7 @@ package firrtl.transforms -import firrtl.analyses.{InstanceGraph, ModuleNamespaceAnnotation} +import firrtl.analyses.{InstanceKeyGraph, ModuleNamespaceAnnotation} import firrtl.ir._ import firrtl._ import firrtl.stage.Forms @@ -39,7 +39,7 @@ class RenameModules extends Transform with DependencyAPIMigration { logger.warn("Skipping Rename Modules") state } else { - val moduleOrder = new InstanceGraph(state.circuit).moduleOrder.reverse + val moduleOrder = InstanceKeyGraph(state.circuit).moduleOrder.reverse val nameMappings = new mutable.HashMap[String, String]() moduleOrder.foreach(collectNameMapping(namespace.get, nameMappings)) diff --git a/src/main/scala/firrtl/transforms/TopWiring.scala b/src/main/scala/firrtl/transforms/TopWiring.scala index 59c494c7..aa046770 100644 --- a/src/main/scala/firrtl/transforms/TopWiring.scala +++ b/src/main/scala/firrtl/transforms/TopWiring.scala @@ -4,9 +4,10 @@ package TopWiring import firrtl._ import firrtl.ir._ -import firrtl.passes.{InferTypes, LowerTypes, ResolveKinds, ResolveFlows, ExpandConnects} +import firrtl.passes.{ExpandConnects, InferTypes, LowerTypes, ResolveFlows, ResolveKinds} import firrtl.annotations._ import firrtl.Mappers._ +import firrtl.analyses.InstanceKeyGraph import firrtl.stage.Forms import firrtl.options.Dependency @@ -129,8 +130,8 @@ class TopWiringTransform extends Transform with DependencyAPIMigration { private def getSourcesMap(state: CircuitState): Map[String,Seq[(ComponentName, Type, Boolean, InstPath, String)]] = { val sSourcesModNames = getSourceModNames(state) val sSourcesNames = getSourceNames(state) - val instGraph = new firrtl.analyses.InstanceGraph(state.circuit) - val cMap = instGraph.getChildrenInstances.map{ case (m, wdis) => + val instGraph = firrtl.analyses.InstanceKeyGraph(state.circuit) + val cMap = instGraph.getChildInstances.map{ case (m, wdis) => (m -> wdis.map{ case wdi => (wdi.name, wdi.module) }.toSeq) }.toMap val topSort = instGraph.moduleOrder.reverse @@ -167,7 +168,7 @@ class TopWiringTransform extends Transform with DependencyAPIMigration { */ private def onModule(sources: Map[String, Seq[(ComponentName, Type, Boolean, InstPath, String)]], portnamesmap : mutable.Map[String,String], - instgraph : firrtl.analyses.InstanceGraph, + instgraph : firrtl.analyses.InstanceKeyGraph, namespacemap : Map[String, Namespace]) (module: DefModule): DefModule = { val namespace = namespacemap(module.name) @@ -186,6 +187,7 @@ class TopWiringTransform extends Transform with DependencyAPIMigration { } } // Add connections to Module + val childInstances = instgraph.getChildInstances.toMap module match { case m: Module => val connections: Seq[Connect] = p.map { case (ComponentName(cname,_), _, _ , path, prefix) => @@ -205,7 +207,7 @@ class TopWiringTransform extends Transform with DependencyAPIMigration { val instportname = portnamesmap.get(prefix + path.tail.mkString("_")) match { case Some(ipn) => ipn case None => { - val instmod = instgraph.getChildrenInstances(module.name).collectFirst { + val instmod = childInstances(module.name).collectFirst { case wdi if wdi.name == path.head => wdi.module}.get val instnamespace = namespacemap(instmod) portnamesmap(prefix + path.tail.mkString("_")) = @@ -244,7 +246,7 @@ class TopWiringTransform extends Transform with DependencyAPIMigration { val sources = getSourcesMap(state) val (nstate, nmappings) = if (sources.nonEmpty) { val portnamesmap: mutable.Map[String,String] = mutable.Map() - val instgraph = new firrtl.analyses.InstanceGraph(state.circuit) + val instgraph = InstanceKeyGraph(state.circuit) val namespacemap = state.circuit.modules.map{ case m => (m.name -> Namespace(m)) }.toMap val modulesx = state.circuit.modules map onModule(sources, portnamesmap, instgraph, namespacemap) val newCircuit = state.circuit.copy(modules = modulesx) |
