From 36227e961a1fa0626249d71edd8b6c829a79a2ee Mon Sep 17 00:00:00 2001 From: Jack Koenig Date: Tue, 12 May 2020 23:03:57 -0700 Subject: Remove expensive .distinct in Dedup --- src/main/scala/firrtl/transforms/Dedup.scala | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/main/scala/firrtl/transforms/Dedup.scala b/src/main/scala/firrtl/transforms/Dedup.scala index d7769820..f9e9db48 100644 --- a/src/main/scala/firrtl/transforms/Dedup.scala +++ b/src/main/scala/firrtl/transforms/Dedup.scala @@ -74,7 +74,11 @@ class DedupModules extends Transform with DependencyAPIMigration with PreservesA val dedupMap = DedupModules.deduplicate(c, noDedups.toSet, annos, renameMap) // Use old module list to preserve ordering - val dedupedModules = c.modules.map(m => dedupMap(m.name)).distinct + // Lookup what a module deduped to, if its a duplicate, remove it + val dedupedModules = c.modules.flatMap { m => + val mx = dedupMap(m.name) + if (mx.name == m.name) Some(mx) else None + } val cname = CircuitName(c.main) val map = dedupMap.map { case (from, to) => -- cgit v1.2.3 From 71e922c0ece775b21769ef8f4dc46ce160a21fb2 Mon Sep 17 00:00:00 2001 From: Jack Koenig Date: Tue, 12 May 2020 23:27:57 -0700 Subject: Remove accidental hashing of all Modules in Dedup --- src/main/scala/firrtl/transforms/Dedup.scala | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/main/scala/firrtl/transforms/Dedup.scala b/src/main/scala/firrtl/transforms/Dedup.scala index f9e9db48..d0df9e32 100644 --- a/src/main/scala/firrtl/transforms/Dedup.scala +++ b/src/main/scala/firrtl/transforms/Dedup.scala @@ -427,7 +427,11 @@ object DedupModules { val dedupedName2module = tag2name.map({ case (tag, name) => name -> DedupModules.dedupInstances(top, name, moduleMap, name2name, renameMap) }) // Build map from original name to corresponding deduped module - val name2module = tag2all.flatMap({ case (tag, names) => names.map(n => n -> dedupedName2module(tag2name(tag))) }) + // It is important to flatMap before looking up the DefModules so that they aren't hashed + val name2module: Map[String, DefModule] = + tag2all.flatMap { case (tag, names) => names.map(_ -> tag) } + .mapValues(tag => dedupedName2module(tag2name(tag))) + .toMap // Build renameMap val indexedTargets = mutable.HashMap[String, IndexedSeq[ReferenceTarget]]() @@ -439,7 +443,7 @@ object DedupModules { } } - name2module.toMap + name2module } def computeIndexedNames(main: String, m: DefModule): IndexedSeq[ReferenceTarget] = { -- cgit v1.2.3