rucc-opt 0.7.5

The pass manager, the acyclic e-graph, the rewrite rules and the analyses.
Documentation
//! Matching the rewrite rules against the IR.
//!
//! Design: `spec/optimizer/13-rewrite-rules.md`. The rules themselves are in `rules/`, one file
//! per tier, and the automaton they compile into is generated by `rucc-rules` when this crate is
//! built. What each rule means is `crates/rucc-ir/rules/ir.model`, and `rucc-verify` makes every
//! one of them prove itself against that model before it may be used.
//!
//! The walk over the automaton is [`rucc_base::rules`], which is where it is because
//! `rucc-codegen` matches its lowering rules with the same walk and neither crate can see the
//! other. What an IR instruction looks like to that walk is [`rucc_ir::term`], for the same
//! reason: a rewrite rule and a lowering rule that spelled `add.i32` differently would be two
//! vocabularies over one IR.
//!
//! The names are re-exported rather than reached for through `rucc_base`, because the generated
//! file refers to them through `super` and that is the whole of the contract between the two.

pub mod canonical;
pub mod compare;
pub mod identities;
pub mod strength;
pub mod width;

pub use rucc_base::rules::{Guard, Match, Node, Piece, Rule, Subject, Table, Test};