diff options
| author | Schuyler Eldridge | 2018-08-22 16:01:09 -0400 |
|---|---|---|
| committer | Schuyler Eldridge | 2018-11-07 13:49:16 -0500 |
| commit | f5a0c8040cac6567f47f5bd64ae5c3c36403148b (patch) | |
| tree | 91e65acc5c6faf18b76c4c70ec53d9706e931514 /src | |
| parent | 845c857b63474c7f584287154e9316a5721ea680 (diff) | |
Make InlineInstances a RegisteredTransform
Signed-off-by: Schuyler Eldridge <schuyler.eldridge@ibm.com>
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/resources/META-INF/services/firrtl.options.RegisteredTransform | 1 | ||||
| -rw-r--r-- | src/main/scala/firrtl/passes/Inline.scala | 24 |
2 files changed, 24 insertions, 1 deletions
diff --git a/src/main/resources/META-INF/services/firrtl.options.RegisteredTransform b/src/main/resources/META-INF/services/firrtl.options.RegisteredTransform index bc169b38..3ba17c46 100644 --- a/src/main/resources/META-INF/services/firrtl.options.RegisteredTransform +++ b/src/main/resources/META-INF/services/firrtl.options.RegisteredTransform @@ -1,2 +1,3 @@ firrtl.transforms.DeadCodeElimination firrtl.transforms.CheckCombLoops +firrtl.passes.InlineInstances diff --git a/src/main/scala/firrtl/passes/Inline.scala b/src/main/scala/firrtl/passes/Inline.scala index feda80f2..dcee0ee2 100644 --- a/src/main/scala/firrtl/passes/Inline.scala +++ b/src/main/scala/firrtl/passes/Inline.scala @@ -7,6 +7,9 @@ import firrtl.ir._ import firrtl.Mappers._ import firrtl.annotations._ import firrtl.analyses.InstanceGraph +import firrtl.stage.RunFirrtlTransformAnnotation +import firrtl.options.RegisteredTransform +import scopt.OptionParser // Datastructures import scala.collection.mutable @@ -20,11 +23,30 @@ case class InlineAnnotation(target: Named) extends SingleTargetAnnotation[Named] * @note Only use on legal Firrtl. Specifically, the restriction of instance loops must have been checked, or else this * pass can infinitely recurse. */ -class InlineInstances extends Transform { +class InlineInstances extends Transform with RegisteredTransform { def inputForm = LowForm def outputForm = LowForm private [firrtl] val inlineDelim: String = "_" + def addOptions(parser: OptionParser[AnnotationSeq]): Unit = parser + .opt[Seq[String]]("inline") + .abbr("fil") + .valueName ("<circuit>[.<module>[.<instance>]][,..],") + .action( (x, c) => { + val newAnnotations = x.map { value => + value.split('.') match { + case Array(circuit) => + InlineAnnotation(CircuitName(circuit)) + case Array(circuit, module) => + InlineAnnotation(ModuleName(module, CircuitName(circuit))) + case Array(circuit, module, inst) => + InlineAnnotation(ComponentName(inst, ModuleName(module, CircuitName(circuit)))) + } + } + c ++ newAnnotations :+ RunFirrtlTransformAnnotation(new InlineInstances) } ) + .text( + """Inline one or more module (comma separated, no spaces) module looks like "MyModule" or "MyModule.myinstance""") + private def collectAnns(circuit: Circuit, anns: Iterable[Annotation]): (Set[ModuleName], Set[ComponentName]) = anns.foldLeft(Set.empty[ModuleName], Set.empty[ComponentName]) { case ((modNames, instNames), ann) => ann match { |
