#![allow(unsafe_code)]
#![allow(
clippy::duplicate_mod,
clippy::too_many_arguments,
clippy::double_must_use,
clippy::module_inception,
clippy::should_implement_trait,
clippy::type_complexity
)]
extern crate self as vyre;
pub mod diagnostics {
#[derive(Debug, Clone)]
pub struct Diagnostic {
pub message: String,
pub location: Option<OpLocation>,
}
impl Diagnostic {
#[must_use]
pub fn error(msg: impl Into<String>) -> Self {
Self {
message: msg.into(),
location: None,
}
}
#[must_use]
pub fn with_location(mut self, loc: OpLocation) -> Self {
self.location = Some(loc);
self
}
}
#[derive(Debug, Clone)]
pub struct OpLocation {
pub op_id: String,
}
impl OpLocation {
#[must_use]
pub fn op(op_id: impl Into<String>) -> Self {
Self {
op_id: op_id.into(),
}
}
}
}
pub mod ir {
pub mod eval {
pub use crate::runtime::ir_eval::{
fold_binary_literal, fold_cast_literal, fold_fma_literal, fold_literal_tree,
fold_unary_literal,
};
}
pub use crate::ir_inner::model;
pub use crate::ir_inner::model::arena::{ArenaProgram, ExprArena, ExprRef};
pub use crate::ir_inner::model::expr::{Expr, ExprNode, Ident};
pub use crate::ir_inner::model::node::{Node, NodeExtension};
pub use crate::ir_inner::model::node_kind::{
EvalError, InterpCtx, NodeId, NodeStorage, OpId, RegionId, Value, VarId,
};
pub use crate::ir_inner::model::program::{
BufferDecl, CacheLocality, LinearType, MemoryHints, MemoryKind, Program, ShapePredicate,
};
pub use crate::ir_inner::model::types::{
AtomicOp, BinOp, BufferAccess, Convention, DataType, OpSignature, UnOp,
};
pub use crate::memory_model;
pub use crate::memory_model::MemoryOrdering;
pub use crate::optimizer::passes::fusion_cse::{cse, dce};
pub use crate::optimizer::pre_lowering::optimize;
pub use crate::serial::text;
pub use crate::transform::inline::{inline_calls, inline_calls_with_resolver, OpResolver};
pub use crate::validate::depth::{
LimitState, DEFAULT_MAX_CALL_DEPTH, DEFAULT_MAX_NESTING_DEPTH, DEFAULT_MAX_NODE_COUNT,
};
pub use crate::validate::validate::validate;
pub use crate::validate::validation_error::ValidationError;
}
pub mod runtime;
pub mod dispatch;
pub mod algebra;
pub mod analysis;
pub use algebra::algebraic_law_registry;
pub use algebra::algebraic_law_registry::{
has_law, is_associative, is_commutative, laws_for_op, AlgebraicLaw, AlgebraicLawRegistration,
};
pub use analysis::graph_view;
pub use dispatch::dialect_lookup;
pub use dispatch::extern_registry;
pub use runtime::memory_model;
pub use runtime::memory_model::MemoryOrdering;
pub mod opaque_payload;
pub mod vast;
pub use analysis::graph_view::{
from_graph, to_graph, DataEdge, DataflowKind, EdgeKind, GraphNode, GraphValidateError,
NodeGraph,
};
pub use dispatch::dialect_lookup::{
dialect_lookup, install_dialect_lookup, intern_string, AttrSchema, AttrType, Category,
DialectLookup, InternedOpId, LoweringCtx, LoweringTable, NativeModule, NativeModuleBuilder,
OpDef, PrimaryBinaryBuilder, PrimaryTextBuilder, ReferenceKind, SecondaryTextBuilder,
Signature, TextModule, TypedParam,
};
pub use dispatch::extern_registry::{
all_ops as all_extern_ops, dialects as extern_dialects,
ops_in_dialect as extern_ops_in_dialect, verify as verify_extern_registry, ExternDialect,
ExternOp, ExternVerifyError,
};
mod ir_inner {
pub mod model;
}
pub use algebra::composition;
pub use dispatch::extension;
pub use runtime::cpu_op;
pub use runtime::cpu_references;
pub(crate) use runtime::ir_eval;
pub use runtime::match_result;
pub use runtime::match_result::ByteRange;
pub use runtime::perf;
pub mod engine;
pub mod lower;
pub mod optimizer;
pub mod serial;
pub mod transform;
pub mod validate;
pub mod visit;
pub mod pass_substrate;
pub mod execution_plan;
pub use runtime::program_caps;
pub mod error;
pub use error::{Error, Result};
#[cfg(test)]
pub(crate) mod test_util;