lam extern _default_compile (): %compile.Phase =
let optimize =
// fixed-point iteration off by default; enable with `-X compile:aggr=on`
%compile.phases (%compile.aggr ff) (
%compile.scalarize,
%compile.phases tt (
%compile.beta_red,
%compile.eta_conv,
),
%compile.named "%mem.seo",
%compile.tail_rec_elim,
);
%compile.phases ff (
optimize,
%compile.named "%regex.lower_regex",
%compile.named "%tensor.lower_tensor",
%compile.named "%tensor.fuse_tensor",
%compile.named "%tensor.lower_to_mem",
// Only run add_mem if the tensor plugin is loaded: tensor bufferization emits %mem.M placeholders that must be stitched into a global mem chain.
%compile.cond "tensor" (%compile.named "%mem.add_mem"),
%compile.named "%matrix.lower_aff",
%compile.named "%gpu.mem_checks",
%compile.named "%autodiff.eval",
%compile.named "%autodiff.zero_repl",
%compile.named "%matrix.lower_matrix_high_level_map_reduce",
%compile.named "%matrix.lower_matrix_medium_level",
%compile.named "%buffer.lower_ptr",
%compile.named "%affine.lower_index",
%compile.named "%cps.conv",
%compile.named "%affine.lower_for",
%compile.internal_cleanup,
// clos conv
let clos_opt_phases =
%compile.phases ff (
%compile.scalarize,
%compile.named "%clos.branch_clos",
%compile.named "%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
// CodeGenPrep
optimize,
%compile.branch_normalize,
%compile.ret_wrap,
%compile.named "%mem.remem_repl",
%compile.named "%nvptx.stream_impl_repl",
%compile.named "%mem.alloc2malloc_repl",
%compile.named "%refly.remove_dbg_repl",
%compile.named "%gpu.check_addr_spaces_repl",
// emit LLVM IR to <world>.ll iff the `ll` plugin is loaded (`-p ll`)
%compile.named "%ll.emit",
%compile.named "%ll_nvptx.emit",
);