calyx_opt/passes/
par_to_seq.rs1use crate::analysis;
2use crate::traversal::{Action, Named, VisResult, Visitor};
3use calyx_ir::{self as ir, LibrarySignatures};
4
5#[derive(Default)]
6pub struct ParToSeq;
25
26impl Named for ParToSeq {
27 fn name() -> &'static str {
28 "par-to-seq"
29 }
30
31 fn description() -> &'static str {
32 "Transform `par` blocks to `seq`"
33 }
34}
35
36impl Visitor for ParToSeq {
37 fn finish_par(
39 &mut self,
40 s: &mut ir::Par,
41 _comp: &mut ir::Component,
42 _c: &LibrarySignatures,
43 _comps: &[ir::Component],
44 ) -> VisResult {
45 let total_order =
46 analysis::ControlOrder::<true>::get_total_order(s.stmts.drain(..))?;
47 let par = ir::Control::seq(total_order);
48 Ok(Action::change(par))
49 }
50}