Skip to main content

vyre_foundation/ir_inner/model/
generated.rs

1#![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    /// Statement nodes  -  execute effects.
12    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    /// Expression nodes  -  produce values.
36    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}