aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJack Koenig2020-05-13 20:39:15 -0700
committerGitHub2020-05-13 20:39:15 -0700
commitdd619167cd21e0f101cf931071d41e6b5ab90565 (patch)
tree79a8491f71acd708805259ea3c96ef27b2f375ac /src
parentf4e4ee0e7586797b6a100062e072143977d04fef (diff)
parent71e922c0ece775b21769ef8f4dc46ce160a21fb2 (diff)
Merge pull request #1602 from freechipsproject/speed-up-dedup
Speed up Deduplication
Diffstat (limited to 'src')
-rw-r--r--src/main/scala/firrtl/transforms/Dedup.scala14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/main/scala/firrtl/transforms/Dedup.scala b/src/main/scala/firrtl/transforms/Dedup.scala
index d7769820..d0df9e32 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) =>
@@ -423,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]]()
@@ -435,7 +443,7 @@ object DedupModules {
}
}
- name2module.toMap
+ name2module
}
def computeIndexedNames(main: String, m: DefModule): IndexedSeq[ReferenceTarget] = {