prjunnamed_generic/rewrite/
normalize.rs1use prjunnamed_netlist::{Cell, MetaItemRef, RewriteResult, RewriteRuleset, Rewriter, Value};
2
3pub struct Normalize;
4
5impl RewriteRuleset for Normalize {
6 fn rewrite<'a>(
7 &self,
8 cell: &Cell,
9 _meta: MetaItemRef<'a>,
10 _output: Option<&Value>,
11 _rewriter: &Rewriter<'a>,
12 ) -> RewriteResult<'a> {
13 let _ = _output;
14 match cell {
15 Cell::Buf(val) => val.clone().into(),
16 Cell::And(val1, val2) if val1 > val2 => RewriteResult::Cell(Cell::And(val2.clone(), val1.clone())),
17 Cell::Or(val1, val2) if val1 > val2 => RewriteResult::Cell(Cell::Or(val2.clone(), val1.clone())),
18 Cell::Xor(val1, val2) if val1 > val2 => RewriteResult::Cell(Cell::Xor(val2.clone(), val1.clone())),
19 Cell::Adc(val1, val2, net) if val1 > val2 => {
20 RewriteResult::Cell(Cell::Adc(val2.clone(), val1.clone(), *net))
21 }
22 Cell::Aig(net1, net2) if net1 > net2 => RewriteResult::Cell(Cell::Aig(*net2, *net1)),
23 Cell::Eq(val1, val2) if val1 > val2 => RewriteResult::Cell(Cell::Eq(val2.clone(), val1.clone())),
24 Cell::Mul(val1, val2) if val1 > val2 => RewriteResult::Cell(Cell::Mul(val2.clone(), val1.clone())),
25 _ => RewriteResult::None,
26 }
27 }
28}