pub use super::bitwise::{
and, clz, ctz, extract_bits, insert_bits, not, or, popcount, reverse_bits, rotl, rotr, shl,
shr, xor,
};
pub use super::compare::logical_not;
pub use super::compare::{eq, ge, gt, le, lt, ne};
pub use super::math::{
abs, add, add_sat, div, gcd, lcm, mod_op, mul, neg, negate, sign, sub, sub_sat,
};
use crate::ir::{BufferDecl, DataType, Expr, Node, Program};
pub(crate) fn unary_u32_program(compute: fn(Expr) -> Expr) -> Program {
let idx = Expr::var("idx");
Program::new(
vec![
BufferDecl::read("a", 0, DataType::U32),
BufferDecl::output("out", 1, DataType::U32),
],
crate::ops::primitive::WORKGROUP_SIZE,
vec![
Node::let_bind("idx", Expr::gid_x()),
Node::if_then(
Expr::lt(idx.clone(), Expr::buf_len("out")),
vec![Node::store(
"out",
idx.clone(),
compute(Expr::load("a", idx)),
)],
),
],
)
}