feat: Implement closure cracking and inlining

Introduces a new optimizer pass that can "crack" closures, allowing for
more aggressive specialization. It also enables inlining of upvalues
that point to immutable global variables. This removes overhead for
higher-order functions and currying when arguments are statically
resolvable.
This commit is contained in:
Michael Schimmel
2026-02-21 18:49:55 +01:00
parent 74ea38248e
commit 0bbe35eeec
11 changed files with 386 additions and 286 deletions
+5
View File
@@ -30,11 +30,16 @@ struct Cli {
/// Run with TracingObserver enabled
#[arg(short, long)]
trace: bool,
/// Optimization level (0: None, 1: Cracking, 2: Aggressive)
#[arg(short, long, default_value_t = 0)]
opt: u32,
}
fn main() {
let cli = Cli::parse();
let mut env = Environment::new();
env.optimization_level = cli.opt;
if cli.bench || cli.update_bench {
if cfg!(debug_assertions) {