vyre_foundation/ir_inner/model/
generated.rs1#![allow(missing_docs)]
2
3use crate::ir_inner::model::expr::{ExprNode, GeneratorRef, Ident};
4use crate::ir_inner::model::node::NodeExtension;
5use crate::ir_inner::model::types::{
6 AtomicOp, BinOp, CollectiveOp, CommGroup, DataType, SubgroupReduceOp, UnOp,
7};
8use std::sync::Arc;
9
10vyre_macros::vyre_ast_registry! {
11 Node {
13 Let { name: Ident, value: Expr },
14 Assign { name: Ident, value: Expr },
15 Store { buffer: Ident, index: Expr, value: Expr },
16 If { cond: Expr, then: Vec<Node>, otherwise: Vec<Node> },
17 Loop { var: Ident, from: Expr, to: Expr, body: Vec<Node> },
18 IndirectDispatch { count_buffer: Ident, count_offset: u64 },
19 AsyncLoad { source: Ident, destination: Ident, offset: Box<Expr>, size: Box<Expr>, tag: Ident },
20 AsyncStore { source: Ident, destination: Ident, offset: Box<Expr>, size: Box<Expr>, tag: Ident },
21 AsyncWait { tag: Ident },
22 Trap { address: Box<Expr>, tag: Ident },
23 Resume { tag: Ident },
24 AllReduce { buffer: Ident, op: CollectiveOp, group: CommGroup },
25 AllGather { input: Ident, output: Ident, group: CommGroup },
26 ReduceScatter { input: Ident, output: Ident, op: CollectiveOp, group: CommGroup },
27 Broadcast { buffer: Ident, root: u32, group: CommGroup },
28 Return,
29 Barrier { ordering: crate::memory_model::MemoryOrdering },
30 Block(Vec<Node>),
31 Region { generator: Ident, source_region: Option<GeneratorRef>, body: Arc<Vec<Node>> },
32 Opaque(Arc<dyn NodeExtension>),
33 }
34
35 Expr {
37 LitU32(u32),
38 LitI32(i32),
39 LitF32(f32),
40 LitBool(bool),
41 Var(Ident),
42 BufferRef { buffer: Ident },
43 Load { buffer: Ident, index: Box<Expr> },
44 BufLen { buffer: Ident },
45 InvocationId { axis: u8 },
46 WorkgroupId { axis: u8 },
47 LocalId { axis: u8 },
48 BinOp { op: BinOp, left: Box<Expr>, right: Box<Expr> },
49 UnOp { op: UnOp, operand: Box<Expr> },
50 Call { op_id: Ident, args: Vec<Expr> },
51 Select { cond: Box<Expr>, true_val: Box<Expr>, false_val: Box<Expr> },
52 Cast { target: DataType, value: Box<Expr> },
53 Fma { a: Box<Expr>, b: Box<Expr>, c: Box<Expr> },
54 Atomic { op: AtomicOp, buffer: Ident, index: Box<Expr>, expected: Option<Box<Expr>>, value: Box<Expr>, ordering: crate::memory_model::MemoryOrdering },
55 SubgroupBallot { cond: Box<Expr> },
56 SubgroupShuffle { value: Box<Expr>, lane: Box<Expr> },
57 SubgroupReduce { op: SubgroupReduceOp, value: Box<Expr> },
58 SubgroupLocalId,
59 SubgroupSize,
60 Opaque(Arc<dyn ExprNode>),
61 }
62}