hugr_llvm/utils/
int_op_builder.rs

1use 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        // TODO Add an OpLoadError variant to BuildError
17        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        // TODO Add an OpLoadError variant to BuildError
28        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 {}