diff options
| author | Jack Koenig | 2018-01-30 12:49:44 -0800 |
|---|---|---|
| committer | Jack Koenig | 2018-01-30 12:49:44 -0800 |
| commit | 8bdc969f95571fa22b39612d3e3acc69268cf2f0 (patch) | |
| tree | de62a08a0a376cc2c6f4bbaa4c45529b98f0cfcc /src | |
| parent | 47d2bb1f447644ee0bcc44701bc84018cc5795b9 (diff) | |
Fix bug incorrectly propagating constants on submodule inputs
Two instances of the same module could collide in counting the number of
instances of each Module. This could lead to constants being propagated
on inputs when it is incorrect to do so.
Fixes #734
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/scala/firrtl/transforms/ConstantPropagation.scala | 9 | ||||
| -rw-r--r-- | src/test/scala/firrtlTests/ConstantPropagationTests.scala | 10 |
2 files changed, 12 insertions, 7 deletions
diff --git a/src/main/scala/firrtl/transforms/ConstantPropagation.scala b/src/main/scala/firrtl/transforms/ConstantPropagation.scala index ca48cbb5..b767ef65 100644 --- a/src/main/scala/firrtl/transforms/ConstantPropagation.scala +++ b/src/main/scala/firrtl/transforms/ConstantPropagation.scala @@ -407,8 +407,13 @@ class ConstantPropagation extends Transform { mod.module -> children.map(i => i.name -> i.module).toMap }) - // Module name to number of instances - val instCount: Map[String, Int] = iGraph.getVertices.groupBy(_.module).mapValues(_.size) + // This is a *relative* instance count, ie. how many there are when you visit each Module once + // (even if it is instantiated multiple times) + val instCount: Map[String, Int] = iGraph.getEdgeMap.foldLeft(Map(c.main -> 1)) { + case (cs, (_, values)) => values.foldLeft(cs) { + case (counts, value) => counts.updated(value.module, counts.getOrElse(value.module, 0) + 1) + } + } // DiGraph using Module names as nodes, destination of edge is a parent Module val parentGraph: DiGraph[String] = iGraph.reverse.transformNodes(_.module) diff --git a/src/test/scala/firrtlTests/ConstantPropagationTests.scala b/src/test/scala/firrtlTests/ConstantPropagationTests.scala index 06e24b97..2aad4f21 100644 --- a/src/test/scala/firrtlTests/ConstantPropagationTests.scala +++ b/src/test/scala/firrtlTests/ConstantPropagationTests.scala @@ -67,9 +67,9 @@ s"""circuit Top : out <= in module Child : output out : UInt<1> - inst b of Bottom - b.in <= UInt(1) - out <= b.out + inst b0 of Bottom + b0.in <= UInt(1) + out <= b0.out module Top : input x : UInt<1> output z : UInt<1> @@ -91,8 +91,8 @@ s"""circuit Top : out <= UInt(1) module Child : output out : UInt<1> - inst b of Bottom - b.in <= UInt(1) + inst b0 of Bottom + b0.in <= UInt(1) out <= UInt(1) module Top : input x : UInt<1> |
