hugr_llvm/utils/
int_op_builder.rs1use hugr_core::{
2 Wire,
3 builder::{BuildError, Dataflow},
4 extension::simple_op::HasConcrete as _,
5 std_extensions::arithmetic::int_ops::IntOpDef,
6 types::TypeArg,
7};
8
9pub trait IntOpBuilder: Dataflow {
10 fn add_iadd(
11 &mut self,
12 log_width: impl Into<TypeArg>,
13 x1: Wire,
14 x2: Wire,
15 ) -> Result<Wire, BuildError> {
16 let op = IntOpDef::iadd.instantiate(&[log_width.into()]).unwrap();
18 Ok(self.add_dataflow_op(op, [x1, x2])?.out_wire(0))
19 }
20
21 fn add_ieq(
22 &mut self,
23 log_width: impl Into<TypeArg>,
24 x1: Wire,
25 x2: Wire,
26 ) -> Result<Wire, BuildError> {
27 let op = IntOpDef::ieq.instantiate(&[log_width.into()]).unwrap();
29 Ok(self.add_dataflow_op(op, [x1, x2])?.out_wire(0))
30 }
31}
32
33impl<D: Dataflow> IntOpBuilder for D {}