mod buffer_decl;
mod builder;
mod canonical;
mod core;
#[allow(clippy::expect_used)]
mod meta;
mod scope;
pub mod stats;
#[cfg(test)]
mod stats_test {
include!("stats_test.rs");
}
#[cfg(test)]
mod tests;
pub use self::buffer_decl::{BufferDecl, LinearType, ShapePredicate};
pub use self::core::Program;
pub use self::scope::Scope;
pub use self::stats::ProgramStats;
pub use self::stats::{
NODE_KIND_ALL_GATHER, NODE_KIND_ALL_REDUCE, NODE_KIND_ASSIGN, NODE_KIND_ASYNC_LOAD,
NODE_KIND_ASYNC_STORE, NODE_KIND_ASYNC_WAIT, NODE_KIND_BARRIER, NODE_KIND_BLOCK,
NODE_KIND_BROADCAST, NODE_KIND_EXPRESSION_BEARING_MASK, NODE_KIND_IF,
NODE_KIND_INDIRECT_DISPATCH, NODE_KIND_LET, NODE_KIND_LOOP, NODE_KIND_OPAQUE,
NODE_KIND_REDUCE_SCATTER, NODE_KIND_REGION, NODE_KIND_RESUME, NODE_KIND_RETURN,
NODE_KIND_STORE, NODE_KIND_TRAP,
};
#[non_exhaustive]
#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)]
pub enum MemoryKind {
Global,
Shared,
Uniform,
Local,
Readonly,
Persistent,
Push,
}
#[non_exhaustive]
#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)]
pub enum CacheLocality {
Streaming,
Temporal,
Random,
}
#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)]
pub struct MemoryHints {
pub coalesce_axis: Option<u8>,
pub preferred_alignment: u32,
pub cache_locality: CacheLocality,
}
impl Default for MemoryHints {
fn default() -> Self {
Self {
coalesce_axis: None,
preferred_alignment: 0,
cache_locality: CacheLocality::Temporal,
}
}
}