Manages the default compilation pipeline of Mim programs using plugins.
lam cond_phase {n: Nat} (name: «n; I8») (phase: %compile.Phase): %compile.Phase = %core.select (%compile.is_loaded name, phase, %compile.null_phase);
lam cond_repl {n: Nat} (name: «n; I8») (repl: %compile.Repl ): %compile.Repl = %core.select (%compile.is_loaded name, repl , %compile.null_repl );
lam cond_pass {n: Nat} (name: «n; I8») (pass: %compile.Pass ): %compile.Pass = %core.select (%compile.is_loaded name, pass , %compile.null_pass );
lam extern _default_compile (): %compile.Phase =
%compile.phases ff (
%compile.pass2phase %compile.scalarize_pass,
%compile.pass2phase (%compile.eta_red_pass ff),
%compile.pass2phase %compile.tail_rec_elim_pass,
%compile.pass2phase (cond_pass "regex" %regex.lower_regex),
// optimize
%compile.phases tt (
%compile.beta_red_phase,
%compile.eta_red_phase,
),
%compile.eta_exp_phase,
cond_phase "affine" %affine.lower_for_phase,
%compile.pass2phase (
%compile.passes (
optimization_passes,
mem_opt_passes,
)
),
cond_phase "autodiff" (
%compile.phases ff (
%compile.pass2phase %autodiff.eval_pass,
%compile.repl2phase %autodiff.zero_repl,
)
),
cond_phase "direct" direct_phases,
cond_phase "matrix" (
%compile.phases ff (
matrix_lower_phase,
cond_phase "direct" direct_phases,
)
),
cond_phase "affine" %affine.lower_for_phase,
%compile.internal_cleanup_phase,
cond_phase "clos" clos_phases,
%compile.pass2phase %compile.lam_spec_pass,
// CodeGenPrep
%compile.branch_normalize_phase,
%compile.ret_wrap_phase,
%compile.repl2phase (
%compile.repls (
%mem.remem_repl,
%mem.alloc2malloc_repl,
cond_repl "refly" %refly.remove_dbg_repl,
)
),
);