spade_mir/passes/
mod.rs

1use std::collections::HashMap;
2
3use spade_common::id_tracker::ExprIdTracker;
4
5use crate::Statement;
6
7pub mod auto_clock_gating;
8pub mod deduplicate_mut_wires;
9mod split_compound_regs;
10
11pub trait MirPass {
12    fn name(&self) -> &'static str;
13
14    fn transform_statements(
15        &self,
16        stmts: &[Statement],
17        expr_idtracker: &mut ExprIdTracker,
18    ) -> Vec<Statement>;
19}
20
21pub fn mir_passes() -> HashMap<&'static str, Box<dyn MirPass>> {
22    vec![
23        Box::new(auto_clock_gating::AutoGating {}) as Box<dyn MirPass>,
24        Box::new(split_compound_regs::SplitCompoundRegs {}) as Box<dyn MirPass>,
25    ]
26    .into_iter()
27    .map(|p| (p.name(), p))
28    .collect()
29}