vyre_foundation/ir_inner/model/program/
mod.rs1mod buffer_decl;
17mod builder;
18mod cache_digest;
19mod canonical;
20mod definition;
21#[allow(clippy::expect_used)]
22mod meta;
23mod scope;
24pub mod stats;
26
27#[cfg(test)]
28mod stats_test;
29#[cfg(test)]
30mod tests;
31
32#[cfg(test)]
33#[inline]
34fn record_digest_computation() {
35 tests::DIGEST_COMPUTATIONS.with(|count| count.set(count.get() + 1));
36}
37
38#[cfg(not(test))]
39#[inline]
40fn record_digest_computation() {}
41
42pub use self::buffer_decl::{BufferDecl, LinearType, ShapePredicate};
43pub use self::cache_digest::NORMALIZED_PROGRAM_CACHE_DIGEST_VERSION;
44pub use self::definition::Program;
45pub use self::scope::Scope;
46pub use self::stats::ProgramStats;
47pub use self::stats::{
48 NODE_KIND_ALL_GATHER, NODE_KIND_ALL_REDUCE, NODE_KIND_ASSIGN, NODE_KIND_ASYNC_LOAD,
49 NODE_KIND_ASYNC_STORE, NODE_KIND_ASYNC_WAIT, NODE_KIND_BARRIER, NODE_KIND_BLOCK,
50 NODE_KIND_BROADCAST, NODE_KIND_EXPRESSION_BEARING_MASK, NODE_KIND_IF,
51 NODE_KIND_INDIRECT_DISPATCH, NODE_KIND_LET, NODE_KIND_LOOP, NODE_KIND_OPAQUE,
52 NODE_KIND_REDUCE_SCATTER, NODE_KIND_REGION, NODE_KIND_RESUME, NODE_KIND_RETURN,
53 NODE_KIND_STORE, NODE_KIND_TRAP,
54};
55
56#[non_exhaustive]
58#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)]
59pub enum MemoryKind {
60 Global,
62 Shared,
64 Uniform,
66 Local,
68 Readonly,
70 Persistent,
72 Push,
74}
75
76#[non_exhaustive]
78#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)]
79pub enum CacheLocality {
80 Streaming,
82 Temporal,
84 Random,
86}
87
88#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)]
90pub struct MemoryHints {
91 pub coalesce_axis: Option<u8>,
93 pub preferred_alignment: u32,
95 pub cache_locality: CacheLocality,
97}
98
99impl Default for MemoryHints {
100 fn default() -> Self {
101 Self {
102 coalesce_axis: None,
103 preferred_alignment: 0,
104 cache_locality: CacheLocality::Temporal,
105 }
106 }
107}