diff options
| author | Schuyler Eldridge | 2020-03-11 14:32:32 -0400 |
|---|---|---|
| committer | GitHub | 2020-03-11 14:32:32 -0400 |
| commit | 026c18dd76d4e2121c7f6c582d15e4d5a3ab842b (patch) | |
| tree | 0537dff3091db3da167c0fffc3388a5966c46204 /src/main/scala/firrtl/LoweringCompilers.scala | |
| parent | 646c91e71b8bfb1b0d0f22e81ca113147637ce71 (diff) | |
| parent | abf226471249a1cbb8de33d0c4bc8526f9aafa70 (diff) | |
Merge pull request #1123 from freechipsproject/dependency-api-2
- Use Dependency API for transform scheduling
- Add tests that old order/behavior is preserved
Or: "Now you're thinking with dependencies."
Diffstat (limited to 'src/main/scala/firrtl/LoweringCompilers.scala')
| -rw-r--r-- | src/main/scala/firrtl/LoweringCompilers.scala | 84 |
1 files changed, 16 insertions, 68 deletions
diff --git a/src/main/scala/firrtl/LoweringCompilers.scala b/src/main/scala/firrtl/LoweringCompilers.scala index 14a8e637..b3d7d087 100644 --- a/src/main/scala/firrtl/LoweringCompilers.scala +++ b/src/main/scala/firrtl/LoweringCompilers.scala @@ -4,53 +4,39 @@ package firrtl import firrtl.transforms.IdentityTransform import firrtl.options.StageUtils +import firrtl.stage.{Forms, TransformManager} +@deprecated("Use a TransformManager or some other Stage/Phase class. Will be removed in 1.3.", "1.2") sealed abstract class CoreTransform extends SeqTransform /** This transforms "CHIRRTL", the chisel3 IR, to "Firrtl". Note the resulting * circuit has only IR nodes, not WIR. */ +@deprecated("Use a TransformManager to handle lowering. Will be removed in 1.3.", "1.2") class ChirrtlToHighFirrtl extends CoreTransform { def inputForm = ChirrtlForm def outputForm = HighForm - def transforms = Seq( - passes.CheckChirrtl, - passes.CInferTypes, - passes.CInferMDir, - passes.RemoveCHIRRTL) + def transforms = new TransformManager(Forms.MinimalHighForm, Forms.ChirrtlForm).flattenedTransformOrder } /** Converts from the bare intermediate representation (ir.scala) * to a working representation (WIR.scala) */ +@deprecated("Use a TransformManager to handle lowering. Will be removed in 1.3.", "1.2") class IRToWorkingIR extends CoreTransform { def inputForm = HighForm def outputForm = HighForm - def transforms = Seq(passes.ToWorkingIR) + def transforms = new TransformManager(Forms.WorkingIR, Forms.MinimalHighForm).flattenedTransformOrder } /** Resolves types, kinds, and flows, and checks the circuit legality. * Operates on working IR nodes and high Firrtl. */ +@deprecated("Use a TransformManager to handle lowering. Will be removed in 1.3.", "1.2") class ResolveAndCheck extends CoreTransform { def inputForm = HighForm def outputForm = HighForm - def transforms = Seq( - passes.CheckHighForm, - passes.ResolveKinds, - passes.InferTypes, - passes.CheckTypes, - passes.Uniquify, - passes.ResolveKinds, - passes.InferTypes, - passes.ResolveFlows, - passes.CheckFlows, - new passes.InferBinaryPoints(), - new passes.TrimIntervals(), - new passes.InferWidths, - passes.CheckWidths, - new firrtl.transforms.InferResets, - passes.CheckTypes) + def transforms = new TransformManager(Forms.Resolved, Forms.WorkingIR).flattenedTransformOrder } /** Expands aggregate connects, removes dynamic accesses, and when @@ -58,78 +44,40 @@ class ResolveAndCheck extends CoreTransform { * well-formed graph. * Operates on working IR nodes. */ +@deprecated("Use a TransformManager to handle lowering. Will be removed in 1.3.", "1.2") class HighFirrtlToMiddleFirrtl extends CoreTransform { def inputForm = HighForm def outputForm = MidForm - def transforms = Seq( - passes.PullMuxes, - passes.ReplaceAccesses, - passes.ExpandConnects, - passes.RemoveAccesses, - passes.Uniquify, - passes.ExpandWhens, - passes.CheckInitialization, - passes.ResolveKinds, - passes.InferTypes, - passes.CheckTypes, - passes.ResolveFlows, - new passes.InferWidths, - passes.CheckWidths, - new passes.RemoveIntervals(), - passes.ConvertFixedToSInt, - passes.ZeroWidth, - passes.InferTypes) + def transforms = new TransformManager(Forms.MidForm, Forms.Deduped).flattenedTransformOrder } /** Expands all aggregate types into many ground-typed components. Must * accept a well-formed graph of only middle Firrtl features. * Operates on working IR nodes. */ +@deprecated("Use a TransformManager to handle lowering. Will be removed in 1.3.", "1.2") class MiddleFirrtlToLowFirrtl extends CoreTransform { def inputForm = MidForm def outputForm = LowForm - def transforms = Seq( - passes.LowerTypes, - passes.ResolveKinds, - passes.InferTypes, - passes.ResolveFlows, - new passes.InferWidths, - passes.Legalize, - new firrtl.transforms.RemoveReset, - new firrtl.transforms.CheckCombLoops, - new checks.CheckResets, - new firrtl.transforms.RemoveWires) + def transforms = new TransformManager(Forms.LowForm, Forms.MidForm).flattenedTransformOrder } /** Runs a series of optimization passes on LowFirrtl * @note This is currently required for correct Verilog emission * TODO Fix the above note */ +@deprecated("Use a TransformManager to handle lowering. Will be removed in 1.3.", "1.2") class LowFirrtlOptimization extends CoreTransform { def inputForm = LowForm def outputForm = LowForm - def transforms = Seq( - passes.RemoveValidIf, - new firrtl.transforms.ConstantPropagation, - passes.PadWidths, - new firrtl.transforms.ConstantPropagation, - passes.Legalize, - passes.memlib.VerilogMemDelays, // TODO move to Verilog emitter - new firrtl.transforms.ConstantPropagation, - passes.SplitExpressions, - new firrtl.transforms.CombineCats, - passes.CommonSubexpressionElimination, - new firrtl.transforms.DeadCodeElimination) + def transforms = new TransformManager(Forms.LowFormOptimized, Forms.LowForm).flattenedTransformOrder } /** Runs runs only the optimization passes needed for Verilog emission */ +@deprecated("Use a TransformManager to handle lowering. Will be removed in 1.3.", "1.2") class MinimumLowFirrtlOptimization extends CoreTransform { def inputForm = LowForm def outputForm = LowForm - def transforms = Seq( - passes.RemoveValidIf, - passes.Legalize, - passes.memlib.VerilogMemDelays, // TODO move to Verilog emitter - passes.SplitExpressions) + def transforms = new TransformManager(Forms.LowFormMinimumOptimized, Forms.LowForm).flattenedTransformOrder } |
