Loading...
Searching...
No Matches
The opt Plugin
- See also
- mim::plug::opt
Manages the default compilation pipeline of Mim programs using plugins.
Dependencies
opt depends on compile and on mem, whose SEO is the general-purpose optimizer, so it references their phases directly. Every other plugin is referenced by name through compile.named (which resolves to the plugin's annex iff it is loaded) and compile.cond (which gates a whole sub-pipeline on a plugin being loaded). This way the default pipeline does not have to import any of the optional plugins.
plugin compile;
plugin mem;
The default pipeline
extern lam _default_compile (): compile.Phase =
let optimize =
// fixed-point iteration off by default; enable with `-X compile:aggr`
compile.phases (compile.aggr ff) (
compile.scalarize,
compile.phases tt (
compile.beta_red,
compile.eta_conv,
),
mem.heap2stack,
mem.seo,
compile.adce,
compile.static_arg_opt,
);
compile.phases ff (
optimize,
// regex
compile.named "regex.lower_regex",
// tensor
compile.named "tensor.reassoc",
compile.named "tensor.lower_tensor",
compile.named "tensor.fuse_tensor",
compile.named "tensor.lower_to_mem",
// tensor bufferization emits mem.M placeholders that need a mem chain.
compile.cond "tensor" mem.add_mem,
// btensor
compile.named "gpu.lower_btensor_map_reduce",
compile.named "btensor.lower_map_reduce",
// gpu
compile.named "gpu.mem_checks",
// autodiff
compile.named "autodiff.eval",
compile.named "autodiff.zero_repl",
// buffer
compile.named "buffer.lower_ptr",
// affine + cps
compile.named "affine.lower_index",
compile.named "cps.conv",
compile.named "affine.lower_for",
// clos conv
let clos_opt_phases =
compile.phases ff (
compile.scalarize,
compile.named "clos.branch_clos",
mem.seo,
);
compile.cond "clos" (
compile.phases ff (
compile.named "clos.clos_conv_prep",
compile.named "clos.clos_conv",
clos_opt_phases,
compile.named "clos.lower_typed_clos_prep",
compile.named "clos.clos2sjlj",
// clos2sjlj introduces new branch closures; clean them up again
clos_opt_phases,
compile.named "clos.lower_typed_clos",
)
),
compile.lam_spec, // replace with lam-lifting
// type legalization
compile.nom_erasure,
compile.single_erasure,
// prepare codegen
optimize,
compile.dispatch_normalize,
compile.ret_wrap,
mem.free_locals,
mem.alloc2malloc_repl,
compile.named "refly.remove_dbg_repl",
compile.named "gpu.check_addr_spaces_repl",
compile.named "ll.emit",
compile.named "nvptx.emit",
);
