diff options
3 files changed, 37 insertions, 8 deletions
diff --git a/benchmark/src/main/scala/firrtl/benchmark/hot/TransformBenchmark.scala b/benchmark/src/main/scala/firrtl/benchmark/hot/TransformBenchmark.scala new file mode 100644 index 00000000..05b759c6 --- /dev/null +++ b/benchmark/src/main/scala/firrtl/benchmark/hot/TransformBenchmark.scala @@ -0,0 +1,27 @@ +// See LICENSE for license details. + +package firrtl +package benchmark +package hot + +import firrtl._ +import firrtl.passes.LowerTypes +import firrtl.stage.TransformManager + +import firrtl.benchmark.util._ + +abstract class TransformBenchmark(factory: () => Transform) extends App { + val inputFile = args(0) + val warmup = args(1).toInt + val runs = args(2).toInt + + val input = filenameToCircuit(inputFile) + val inputState = CircuitState(input, ChirrtlForm) + + val manager = new TransformManager(factory().prerequisites) + val preState = manager.execute(inputState) + + hot.util.benchmark(warmup, runs)(factory().transform(preState)) +} + +object LowerTypesBenchmark extends TransformBenchmark(() => LowerTypes) diff --git a/benchmark/src/main/scala/firrtl/benchmark/hot/util/package.scala b/benchmark/src/main/scala/firrtl/benchmark/hot/util/package.scala index c05b8359..911bd03a 100644 --- a/benchmark/src/main/scala/firrtl/benchmark/hot/util/package.scala +++ b/benchmark/src/main/scala/firrtl/benchmark/hot/util/package.scala @@ -15,6 +15,7 @@ package object util { // Benchmark val times: Array[Double] = Array.fill(nRun)(0.0) for (i <- 0 until nRun) { + System.gc val (t, res) = time(f) times(i) = t println(f"Benchmark run $i took $t%.1f ms") diff --git a/src/main/scala/firrtl/passes/LowerTypes.scala b/src/main/scala/firrtl/passes/LowerTypes.scala index ccfe5828..29792d17 100644 --- a/src/main/scala/firrtl/passes/LowerTypes.scala +++ b/src/main/scala/firrtl/passes/LowerTypes.scala @@ -55,16 +55,16 @@ object LowerTypes extends Transform with DependencyAPIMigration { val name = root + loweredName(e) renames.rename(root + e.serialize, name) Seq(name) - case (t: BundleType) => t.fields.flatMap { f => - val subNames = renameExps(renames, WSubField(e, f.name, f.tpe, times(flow(e), f.flip)), root) + case (t: BundleType) => + val subNames = t.fields.flatMap { f => + renameExps(renames, WSubField(e, f.name, f.tpe, times(flow(e), f.flip)), root) + } renames.rename(root + e.serialize, subNames) subNames - } - case (t: VectorType) => (0 until t.size).flatMap { i => - val subNames = renameExps(renames, WSubIndex(e, i, t.tpe,flow(e)), root) + case (t: VectorType) => + val subNames = (0 until t.size).flatMap { i => renameExps(renames, WSubIndex(e, i, t.tpe,flow(e)), root) } renames.rename(root + e.serialize, subNames) subNames - } } private def renameMemExps(renames: RenameMap, e: Expression, portAndField: Expression): Seq[String] = e.tpe match { @@ -224,9 +224,10 @@ object LowerTypes extends Transform with DependencyAPIMigration { val d = WRef(mem.name, sx.dataType) tail match { case None => - create_exps(mem.name, sx.dataType) foreach { x => - renames.rename(e.serialize, s"${loweredName(x)}.${port.serialize}.${field.serialize}") + val names = create_exps(mem.name, sx.dataType).map { x => + s"${loweredName(x)}.${port.serialize}.${field.serialize}" } + renames.rename(e.serialize, names) case Some(_) => renameMemExps(renames, d, mergeRef(port, field)) } |
