package ocaml-solo5-cross-aarch64

  1. Overview
  2. Docs
OCaml cross-compiler to the freestanding 64-bit ARM Solo5 backend

Install

dune-project
 Dependency

Authors

Maintainers

Sources

v1.0.1.tar.gz
md5=11ce90fb59f3ddf2ca04d33ce971e247
sha512=a7fbd333154e8892f621000b7c852f6a3dce1aa66d6f2a16e9543cfdb479003f90eb9c02ae5e925edbe6cb4d83ce45e726c55754dfbaee7dc2a51029fb921c25

doc/compiler-libs.optcomp/Unbox_specialised_args/index.html

Module Unbox_specialised_args

When approximations of specialised arguments indicate that they are closures or blocks, add more specialised arguments corresponding to the projections from such blocks (with definitions of such projections lifted out), such that the original specialised arguments may later be eliminated.

This in particular enables elimination of closure allocations in examples such as:

let rec map f = function | -> | a::l -> let r = f a in r :: map f l

let g x = map (fun y -> x + y) 1; 2; 3; 4

Here, the specialised version of map initially has a specialised argument f; and upon inlining there will be a projection of x from the closure of f. This pass adds a new specialised argument to carry that projection, at which point the closure of f is redundant.

val rewrite_set_of_closures : env:Inline_and_simplify_aux.Env.t -> duplicate_function: (env:Inline_and_simplify_aux.Env.t -> set_of_closures:Flambda.set_of_closures -> fun_var:Variable.t -> new_fun_var:Variable.t -> Flambda.function_declaration * Flambda.specialised_to Variable.Map.t) -> set_of_closures:Flambda.set_of_closures -> (Flambda.expr * Inlining_cost.Benefit.t) option