1pub mod devectorize;
22pub mod expand;
23pub mod gpudims;
24pub mod linearize;
25pub mod optimizer;
26pub mod passes;
27pub mod rangeify;
28pub mod symbolic;
29#[cfg(feature = "testing")]
30pub mod testing;
31
32#[cfg(feature = "z3")]
33pub mod z3;
34
35#[cfg(test)]
36pub mod test;
37
38pub use morok_ir::pattern;
41pub use morok_ir::rewrite;
42
43pub use linearize::{CFGContext, linearize, linearize_with_cfg};
45pub use morok_ir::pattern::{Matcher, RewriteResult, TypedPatternMatcher};
46pub use morok_ir::rewrite::graph_rewrite;
47pub use rangeify::{RangeifyResult, rangeify, rangeify_with_map, run_kernel_split_pipeline};
48
49pub use expand::{expander, pm_group_for_reduce, pm_pre_expander, pre_expand};
51
52pub use devectorize::devectorize;
54
55pub use gpudims::pm_add_gpudims;
57
58pub use passes::{build_linear_index, compute_row_major_strides, count_divmod, extract_index_dimension};
60
61pub use optimizer::{
63 BeamConfig, BeamResult, HeuristicsConfig, OptError, OptStrategy, OptimizerConfig, Renderer as OptimizerRenderer,
64 Scheduler, TcOptLevel, TcSelect, TcUsage, apply_post_optimization, apply_post_optimization_with_renderer,
65 beam_search_cached, hand_coded_optimizations, optimize_kernel, optimize_kernel_with_config,
66 optimize_kernel_with_strategy, prepare_scheduler,
67};
68
69pub use morok_ir::UOp;
71
72pub use morok_macros::{cached_patterns, patterns};
74
75pub(crate) fn argsort(perm: &[usize]) -> Vec<usize> {
77 let mut inv = vec![0; perm.len()];
78 for (i, &p) in perm.iter().enumerate() {
79 inv[p] = i;
80 }
81 inv
82}