1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
//! The pass manager, the acyclic e-graph, the rewrite rules and the analyses.
//!
//! Design: `spec/09-optimizer.md`. Layer rank 9, see `spec/18-package-layout.md`.
//!
//! # What is here
//!
//! The pass manager and three passes. [`pipeline`] holds the six pipelines, one per optimization
//! level, written out rather than assembled from flags, along with the fuel, the dumps and the
//! verification that section 9.10 asks of every pass. [`fold`] is the first pass through it, [`simplify`] is the peephole the e-graph will
//! eventually absorb, and [`dce`] is what clears up after both of them.
//!
//! The e-graph, the rewrite rule set and the analyses are still M4 work and are not here yet.
//! So is the analysis manager, which section 9.10 also asks for: a pass declares which analyses
//! it requires, preserves and invalidates, and a debug check recomputes one it claimed to
//! preserve and compares. There are no analyses to declare, so that machinery lands with the
//! dominator tree rather than being guessed at now.
//!
//! # Stability
//!
//! Every crate in the workspace is published, and publishing implies a promise. This one is
//! tier 3: its Rust API is explicitly unstable and will change without a major version bump.
//! Depend on the `rucc` binary's behaviour, not on this.
pub use Fuel;
pub use ;
pub use ;
/// The milestone in `spec/17-milestones.md` that fills this crate in.
pub const MILESTONE: &str = "M4";