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}