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_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.passes %compile.scalarize_pass,
%compile.passes %compile.eta_red_pass,
%compile.passes %compile.tail_rec_elim_pass,
%compile.passes (cond_pass "regex" %regex.lower_regex),
// optimize
%compile.passes (
optimization_passes,
cond_pass "affine" %affine.lower_for_pass,
mem_opt_passes,
),
cond_phase "autodiff"
(%compile.phases ff (
%compile.passes %autodiff.ad_eval_pass,
%compile.passes %autodiff.ad_zero_pass,
)),
cond_phase "direct" direct_phases,
cond_phase "matrix"
(%compile.phases ff (
matrix_lower_phase,
cond_phase "direct" direct_phases,
cond_phase "affine" (%compile.passes %affine.lower_for_pass))),
%compile.internal_cleanup_phase,
cond_phase "clos" clos_phases,
%compile.passes %compile.lam_spec_pass,
cond_phase "autodiff" ad_cleanup_phase,
// CodeGenPrep
%compile.passes (
%compile.ret_wrap_pass,
%mem.remem_elim_pass,
%mem.alloc2malloc_pass,
cond_pass "refly" %refly.remove_dbg_perm_pass,
)
);