aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSchuyler Eldridge2018-08-22 16:01:09 -0400
committerSchuyler Eldridge2018-11-07 13:49:16 -0500
commitf5a0c8040cac6567f47f5bd64ae5c3c36403148b (patch)
tree91e65acc5c6faf18b76c4c70ec53d9706e931514 /src
parent845c857b63474c7f584287154e9316a5721ea680 (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.RegisteredTransform1
-rw-r--r--src/main/scala/firrtl/passes/Inline.scala24
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 {