moonpool/dev/ocaml/Cmm/index.html
2023-11-08 17:22:30 +00:00

30 lines
48 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Cmm (ocaml.Cmm)</title><link rel="stylesheet" href="../../_odoc-theme/odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 2.3.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> <a href="../index.html">ocaml</a> &#x00BB; Cmm</nav><header class="odoc-preamble"><h1>Module <code><span>Cmm</span></code></h1></header><div class="odoc-content"><div class="odoc-spec"><div class="spec type anchored" id="type-machtype_component"><a href="#type-machtype_component" class="anchor"></a><code><span><span class="keyword">type</span> machtype_component</span><span> = </span></code><ol><li id="type-machtype_component.Val" class="def variant constructor anchored"><a href="#type-machtype_component.Val" class="anchor"></a><code><span>| </span><span><span class="constructor">Val</span></span></code></li><li id="type-machtype_component.Addr" class="def variant constructor anchored"><a href="#type-machtype_component.Addr" class="anchor"></a><code><span>| </span><span><span class="constructor">Addr</span></span></code></li><li id="type-machtype_component.Int" class="def variant constructor anchored"><a href="#type-machtype_component.Int" class="anchor"></a><code><span>| </span><span><span class="constructor">Int</span></span></code></li><li id="type-machtype_component.Float" class="def variant constructor anchored"><a href="#type-machtype_component.Float" class="anchor"></a><code><span>| </span><span><span class="constructor">Float</span></span></code></li></ol></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-machtype"><a href="#type-machtype" class="anchor"></a><code><span><span class="keyword">type</span> machtype</span><span> = <span><a href="#type-machtype_component">machtype_component</a> array</span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-typ_void"><a href="#val-typ_void" class="anchor"></a><code><span><span class="keyword">val</span> typ_void : <a href="#type-machtype">machtype</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-typ_val"><a href="#val-typ_val" class="anchor"></a><code><span><span class="keyword">val</span> typ_val : <a href="#type-machtype">machtype</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-typ_addr"><a href="#val-typ_addr" class="anchor"></a><code><span><span class="keyword">val</span> typ_addr : <a href="#type-machtype">machtype</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-typ_int"><a href="#val-typ_int" class="anchor"></a><code><span><span class="keyword">val</span> typ_int : <a href="#type-machtype">machtype</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-typ_float"><a href="#val-typ_float" class="anchor"></a><code><span><span class="keyword">val</span> typ_float : <a href="#type-machtype">machtype</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-lub_component"><a href="#val-lub_component" class="anchor"></a><code><span><span class="keyword">val</span> lub_component :
<span><a href="#type-machtype_component">machtype_component</a> <span class="arrow">&#45;&gt;</span></span>
<span><a href="#type-machtype_component">machtype_component</a> <span class="arrow">&#45;&gt;</span></span>
<a href="#type-machtype_component">machtype_component</a></span></code></div><div class="spec-doc"><p>Least upper bound of two <code>machtype_component</code>s.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-ge_component"><a href="#val-ge_component" class="anchor"></a><code><span><span class="keyword">val</span> ge_component : <span><a href="#type-machtype_component">machtype_component</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-machtype_component">machtype_component</a> <span class="arrow">&#45;&gt;</span></span> bool</span></code></div><div class="spec-doc"><p>Returns <code>true</code> iff the first supplied <code>machtype_component</code> is greater than or equal to the second under the relation used by <code>lub_component</code>.</p></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-exttype"><a href="#type-exttype" class="anchor"></a><code><span><span class="keyword">type</span> exttype</span><span> = </span></code><ol><li id="type-exttype.XInt" class="def variant constructor anchored"><a href="#type-exttype.XInt" class="anchor"></a><code><span>| </span><span><span class="constructor">XInt</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p>r OCaml value, word-sized integer</p><span class="comment-delim">*)</span></div></li><li id="type-exttype.XInt32" class="def variant constructor anchored"><a href="#type-exttype.XInt32" class="anchor"></a><code><span>| </span><span><span class="constructor">XInt32</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p>r 32-bit integer</p><span class="comment-delim">*)</span></div></li><li id="type-exttype.XInt64" class="def variant constructor anchored"><a href="#type-exttype.XInt64" class="anchor"></a><code><span>| </span><span><span class="constructor">XInt64</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p>r 64-bit integer</p><span class="comment-delim">*)</span></div></li><li id="type-exttype.XFloat" class="def variant constructor anchored"><a href="#type-exttype.XFloat" class="anchor"></a><code><span>| </span><span><span class="constructor">XFloat</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p>r double-precision FP number</p><span class="comment-delim">*)</span></div></li></ol></div><div class="spec-doc"><p>A variant of <code>machtype</code> used to describe arguments to external C functions</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-machtype_of_exttype"><a href="#val-machtype_of_exttype" class="anchor"></a><code><span><span class="keyword">val</span> machtype_of_exttype : <span><a href="#type-exttype">exttype</a> <span class="arrow">&#45;&gt;</span></span> <a href="#type-machtype">machtype</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-machtype_of_exttype_list"><a href="#val-machtype_of_exttype_list" class="anchor"></a><code><span><span class="keyword">val</span> machtype_of_exttype_list : <span><span><a href="#type-exttype">exttype</a> list</span> <span class="arrow">&#45;&gt;</span></span> <a href="#type-machtype">machtype</a></span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-integer_comparison"><a href="#type-integer_comparison" class="anchor"></a><code><span><span class="keyword">type</span> integer_comparison</span><span> = <a href="../Lambda/index.html#type-integer_comparison">Lambda.integer_comparison</a></span><span> = </span></code><ol><li id="type-integer_comparison.Ceq" class="def variant constructor anchored"><a href="#type-integer_comparison.Ceq" class="anchor"></a><code><span>| </span><span><span class="constructor">Ceq</span></span></code></li><li id="type-integer_comparison.Cne" class="def variant constructor anchored"><a href="#type-integer_comparison.Cne" class="anchor"></a><code><span>| </span><span><span class="constructor">Cne</span></span></code></li><li id="type-integer_comparison.Clt" class="def variant constructor anchored"><a href="#type-integer_comparison.Clt" class="anchor"></a><code><span>| </span><span><span class="constructor">Clt</span></span></code></li><li id="type-integer_comparison.Cgt" class="def variant constructor anchored"><a href="#type-integer_comparison.Cgt" class="anchor"></a><code><span>| </span><span><span class="constructor">Cgt</span></span></code></li><li id="type-integer_comparison.Cle" class="def variant constructor anchored"><a href="#type-integer_comparison.Cle" class="anchor"></a><code><span>| </span><span><span class="constructor">Cle</span></span></code></li><li id="type-integer_comparison.Cge" class="def variant constructor anchored"><a href="#type-integer_comparison.Cge" class="anchor"></a><code><span>| </span><span><span class="constructor">Cge</span></span></code></li></ol></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-negate_integer_comparison"><a href="#val-negate_integer_comparison" class="anchor"></a><code><span><span class="keyword">val</span> negate_integer_comparison : <span><a href="#type-integer_comparison">integer_comparison</a> <span class="arrow">&#45;&gt;</span></span> <a href="#type-integer_comparison">integer_comparison</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-swap_integer_comparison"><a href="#val-swap_integer_comparison" class="anchor"></a><code><span><span class="keyword">val</span> swap_integer_comparison : <span><a href="#type-integer_comparison">integer_comparison</a> <span class="arrow">&#45;&gt;</span></span> <a href="#type-integer_comparison">integer_comparison</a></span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-float_comparison"><a href="#type-float_comparison" class="anchor"></a><code><span><span class="keyword">type</span> float_comparison</span><span> = <a href="../Lambda/index.html#type-float_comparison">Lambda.float_comparison</a></span><span> = </span></code><ol><li id="type-float_comparison.CFeq" class="def variant constructor anchored"><a href="#type-float_comparison.CFeq" class="anchor"></a><code><span>| </span><span><span class="constructor">CFeq</span></span></code></li><li id="type-float_comparison.CFneq" class="def variant constructor anchored"><a href="#type-float_comparison.CFneq" class="anchor"></a><code><span>| </span><span><span class="constructor">CFneq</span></span></code></li><li id="type-float_comparison.CFlt" class="def variant constructor anchored"><a href="#type-float_comparison.CFlt" class="anchor"></a><code><span>| </span><span><span class="constructor">CFlt</span></span></code></li><li id="type-float_comparison.CFnlt" class="def variant constructor anchored"><a href="#type-float_comparison.CFnlt" class="anchor"></a><code><span>| </span><span><span class="constructor">CFnlt</span></span></code></li><li id="type-float_comparison.CFgt" class="def variant constructor anchored"><a href="#type-float_comparison.CFgt" class="anchor"></a><code><span>| </span><span><span class="constructor">CFgt</span></span></code></li><li id="type-float_comparison.CFngt" class="def variant constructor anchored"><a href="#type-float_comparison.CFngt" class="anchor"></a><code><span>| </span><span><span class="constructor">CFngt</span></span></code></li><li id="type-float_comparison.CFle" class="def variant constructor anchored"><a href="#type-float_comparison.CFle" class="anchor"></a><code><span>| </span><span><span class="constructor">CFle</span></span></code></li><li id="type-float_comparison.CFnle" class="def variant constructor anchored"><a href="#type-float_comparison.CFnle" class="anchor"></a><code><span>| </span><span><span class="constructor">CFnle</span></span></code></li><li id="type-float_comparison.CFge" class="def variant constructor anchored"><a href="#type-float_comparison.CFge" class="anchor"></a><code><span>| </span><span><span class="constructor">CFge</span></span></code></li><li id="type-float_comparison.CFnge" class="def variant constructor anchored"><a href="#type-float_comparison.CFnge" class="anchor"></a><code><span>| </span><span><span class="constructor">CFnge</span></span></code></li></ol></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-negate_float_comparison"><a href="#val-negate_float_comparison" class="anchor"></a><code><span><span class="keyword">val</span> negate_float_comparison : <span><a href="#type-float_comparison">float_comparison</a> <span class="arrow">&#45;&gt;</span></span> <a href="#type-float_comparison">float_comparison</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-swap_float_comparison"><a href="#val-swap_float_comparison" class="anchor"></a><code><span><span class="keyword">val</span> swap_float_comparison : <span><a href="#type-float_comparison">float_comparison</a> <span class="arrow">&#45;&gt;</span></span> <a href="#type-float_comparison">float_comparison</a></span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-label"><a href="#type-label" class="anchor"></a><code><span><span class="keyword">type</span> label</span><span> = int</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-new_label"><a href="#val-new_label" class="anchor"></a><code><span><span class="keyword">val</span> new_label : <span>unit <span class="arrow">&#45;&gt;</span></span> <a href="#type-label">label</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-set_label"><a href="#val-set_label" class="anchor"></a><code><span><span class="keyword">val</span> set_label : <span><a href="#type-label">label</a> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-cur_label"><a href="#val-cur_label" class="anchor"></a><code><span><span class="keyword">val</span> cur_label : <span>unit <span class="arrow">&#45;&gt;</span></span> <a href="#type-label">label</a></span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-rec_flag"><a href="#type-rec_flag" class="anchor"></a><code><span><span class="keyword">type</span> rec_flag</span><span> = </span></code><ol><li id="type-rec_flag.Nonrecursive" class="def variant constructor anchored"><a href="#type-rec_flag.Nonrecursive" class="anchor"></a><code><span>| </span><span><span class="constructor">Nonrecursive</span></span></code></li><li id="type-rec_flag.Recursive" class="def variant constructor anchored"><a href="#type-rec_flag.Recursive" class="anchor"></a><code><span>| </span><span><span class="constructor">Recursive</span></span></code></li></ol></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-phantom_defining_expr"><a href="#type-phantom_defining_expr" class="anchor"></a><code><span><span class="keyword">type</span> phantom_defining_expr</span><span> = </span></code><ol><li id="type-phantom_defining_expr.Cphantom_const_int" class="def variant constructor anchored"><a href="#type-phantom_defining_expr.Cphantom_const_int" class="anchor"></a><code><span>| </span><span><span class="constructor">Cphantom_const_int</span> <span class="keyword">of</span> <a href="../Targetint/index.html#type-t">Targetint.t</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p>The phantom-let-bound variable is a constant integer. The argument must be the tagged representation of an integer within the range of type <code>int</code> on the target. (Analogously to <code>Cconst_int</code>.)</p><span class="comment-delim">*)</span></div></li><li id="type-phantom_defining_expr.Cphantom_const_symbol" class="def variant constructor anchored"><a href="#type-phantom_defining_expr.Cphantom_const_symbol" class="anchor"></a><code><span>| </span><span><span class="constructor">Cphantom_const_symbol</span> <span class="keyword">of</span> string</span></code><div class="def-doc"><span class="comment-delim">(*</span><p>The phantom-let-bound variable is an alias for a symbol.</p><span class="comment-delim">*)</span></div></li><li id="type-phantom_defining_expr.Cphantom_var" class="def variant constructor anchored"><a href="#type-phantom_defining_expr.Cphantom_var" class="anchor"></a><code><span>| </span><span><span class="constructor">Cphantom_var</span> <span class="keyword">of</span> <a href="../Backend_var/index.html#type-t">Backend_var.t</a></span></code><div class="def-doc"><span class="comment-delim">(*</span><p>The phantom-let-bound variable is an alias for another variable. The aliased variable must not be a bound by a phantom let.</p><span class="comment-delim">*)</span></div></li><li id="type-phantom_defining_expr.Cphantom_offset_var" class="def variant constructor anchored"><a href="#type-phantom_defining_expr.Cphantom_offset_var" class="anchor"></a><code><span>| </span><span><span class="constructor">Cphantom_offset_var</span> <span class="keyword">of</span> </span><span>{</span></code><ol><li id="type-phantom_defining_expr.var" class="def record field anchored"><a href="#type-phantom_defining_expr.var" class="anchor"></a><code><span>var : <a href="../Backend_var/index.html#type-t">Backend_var.t</a>;</span></code></li><li id="type-phantom_defining_expr.offset_in_words" class="def record field anchored"><a href="#type-phantom_defining_expr.offset_in_words" class="anchor"></a><code><span>offset_in_words : int;</span></code></li></ol><code><span>}</span></code><div class="def-doc"><span class="comment-delim">(*</span><p>The phantom-let-bound-variable's value is defined by adding the given number of words to the pointer contained in the given identifier.</p><span class="comment-delim">*)</span></div></li><li id="type-phantom_defining_expr.Cphantom_read_field" class="def variant constructor anchored"><a href="#type-phantom_defining_expr.Cphantom_read_field" class="anchor"></a><code><span>| </span><span><span class="constructor">Cphantom_read_field</span> <span class="keyword">of</span> </span><span>{</span></code><ol><li id="type-phantom_defining_expr.var" class="def record field anchored"><a href="#type-phantom_defining_expr.var" class="anchor"></a><code><span>var : <a href="../Backend_var/index.html#type-t">Backend_var.t</a>;</span></code></li><li id="type-phantom_defining_expr.field" class="def record field anchored"><a href="#type-phantom_defining_expr.field" class="anchor"></a><code><span>field : int;</span></code></li></ol><code><span>}</span></code><div class="def-doc"><span class="comment-delim">(*</span><p>The phantom-let-bound-variable's value is found by adding the given number of words to the pointer contained in the given identifier, then dereferencing.</p><span class="comment-delim">*)</span></div></li><li id="type-phantom_defining_expr.Cphantom_read_symbol_field" class="def variant constructor anchored"><a href="#type-phantom_defining_expr.Cphantom_read_symbol_field" class="anchor"></a><code><span>| </span><span><span class="constructor">Cphantom_read_symbol_field</span> <span class="keyword">of</span> </span><span>{</span></code><ol><li id="type-phantom_defining_expr.sym" class="def record field anchored"><a href="#type-phantom_defining_expr.sym" class="anchor"></a><code><span>sym : string;</span></code></li><li id="type-phantom_defining_expr.field" class="def record field anchored"><a href="#type-phantom_defining_expr.field" class="anchor"></a><code><span>field : int;</span></code></li></ol><code><span>}</span></code><div class="def-doc"><span class="comment-delim">(*</span><p>As for <code>Uphantom_read_var_field</code>, but with the pointer specified by a symbol.</p><span class="comment-delim">*)</span></div></li><li id="type-phantom_defining_expr.Cphantom_block" class="def variant constructor anchored"><a href="#type-phantom_defining_expr.Cphantom_block" class="anchor"></a><code><span>| </span><span><span class="constructor">Cphantom_block</span> <span class="keyword">of</span> </span><span>{</span></code><ol><li id="type-phantom_defining_expr.tag" class="def record field anchored"><a href="#type-phantom_defining_expr.tag" class="anchor"></a><code><span>tag : int;</span></code></li><li id="type-phantom_defining_expr.fields" class="def record field anchored"><a href="#type-phantom_defining_expr.fields" class="anchor"></a><code><span>fields : <span><a href="../Backend_var/index.html#type-t">Backend_var.t</a> list</span>;</span></code></li></ol><code><span>}</span></code><div class="def-doc"><span class="comment-delim">(*</span><p>The phantom-let-bound variable points at a block with the given structure.</p><span class="comment-delim">*)</span></div></li></ol></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-memory_chunk"><a href="#type-memory_chunk" class="anchor"></a><code><span><span class="keyword">type</span> memory_chunk</span><span> = </span></code><ol><li id="type-memory_chunk.Byte_unsigned" class="def variant constructor anchored"><a href="#type-memory_chunk.Byte_unsigned" class="anchor"></a><code><span>| </span><span><span class="constructor">Byte_unsigned</span></span></code></li><li id="type-memory_chunk.Byte_signed" class="def variant constructor anchored"><a href="#type-memory_chunk.Byte_signed" class="anchor"></a><code><span>| </span><span><span class="constructor">Byte_signed</span></span></code></li><li id="type-memory_chunk.Sixteen_unsigned" class="def variant constructor anchored"><a href="#type-memory_chunk.Sixteen_unsigned" class="anchor"></a><code><span>| </span><span><span class="constructor">Sixteen_unsigned</span></span></code></li><li id="type-memory_chunk.Sixteen_signed" class="def variant constructor anchored"><a href="#type-memory_chunk.Sixteen_signed" class="anchor"></a><code><span>| </span><span><span class="constructor">Sixteen_signed</span></span></code></li><li id="type-memory_chunk.Thirtytwo_unsigned" class="def variant constructor anchored"><a href="#type-memory_chunk.Thirtytwo_unsigned" class="anchor"></a><code><span>| </span><span><span class="constructor">Thirtytwo_unsigned</span></span></code></li><li id="type-memory_chunk.Thirtytwo_signed" class="def variant constructor anchored"><a href="#type-memory_chunk.Thirtytwo_signed" class="anchor"></a><code><span>| </span><span><span class="constructor">Thirtytwo_signed</span></span></code></li><li id="type-memory_chunk.Word_int" class="def variant constructor anchored"><a href="#type-memory_chunk.Word_int" class="anchor"></a><code><span>| </span><span><span class="constructor">Word_int</span></span></code></li><li id="type-memory_chunk.Word_val" class="def variant constructor anchored"><a href="#type-memory_chunk.Word_val" class="anchor"></a><code><span>| </span><span><span class="constructor">Word_val</span></span></code></li><li id="type-memory_chunk.Single" class="def variant constructor anchored"><a href="#type-memory_chunk.Single" class="anchor"></a><code><span>| </span><span><span class="constructor">Single</span></span></code></li><li id="type-memory_chunk.Double" class="def variant constructor anchored"><a href="#type-memory_chunk.Double" class="anchor"></a><code><span>| </span><span><span class="constructor">Double</span></span></code></li></ol></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-operation"><a href="#type-operation" class="anchor"></a><code><span><span class="keyword">and</span> operation</span><span> = </span></code><ol><li id="type-operation.Capply" class="def variant constructor anchored"><a href="#type-operation.Capply" class="anchor"></a><code><span>| </span><span><span class="constructor">Capply</span> <span class="keyword">of</span> <a href="#type-machtype">machtype</a></span></code></li><li id="type-operation.Cextcall" class="def variant constructor anchored"><a href="#type-operation.Cextcall" class="anchor"></a><code><span>| </span><span><span class="constructor">Cextcall</span> <span class="keyword">of</span> string * <a href="#type-machtype">machtype</a> * <span><a href="#type-exttype">exttype</a> list</span> * bool</span></code><div class="def-doc"><span class="comment-delim">(*</span><p>The <code>machtype</code> is the machine type of the result. The <code>exttype list</code> describes the unboxing types of the arguments. An empty list means &quot;all arguments are machine words <code>XInt</code>&quot;. The boolean indicates whether the function may allocate.</p><span class="comment-delim">*)</span></div></li><li id="type-operation.Cload" class="def variant constructor anchored"><a href="#type-operation.Cload" class="anchor"></a><code><span>| </span><span><span class="constructor">Cload</span> <span class="keyword">of</span> </span><span>{</span></code><ol><li id="type-operation.memory_chunk" class="def record field anchored"><a href="#type-operation.memory_chunk" class="anchor"></a><code><span>memory_chunk : <a href="#type-memory_chunk">memory_chunk</a>;</span></code></li><li id="type-operation.mutability" class="def record field anchored"><a href="#type-operation.mutability" class="anchor"></a><code><span>mutability : <a href="../Asttypes/index.html#type-mutable_flag">Asttypes.mutable_flag</a>;</span></code></li><li id="type-operation.is_atomic" class="def record field anchored"><a href="#type-operation.is_atomic" class="anchor"></a><code><span>is_atomic : bool;</span></code></li></ol><code><span>}</span></code></li><li id="type-operation.Calloc" class="def variant constructor anchored"><a href="#type-operation.Calloc" class="anchor"></a><code><span>| </span><span><span class="constructor">Calloc</span></span></code></li><li id="type-operation.Cstore" class="def variant constructor anchored"><a href="#type-operation.Cstore" class="anchor"></a><code><span>| </span><span><span class="constructor">Cstore</span> <span class="keyword">of</span> <a href="#type-memory_chunk">memory_chunk</a> * <a href="../Lambda/index.html#type-initialization_or_assignment">Lambda.initialization_or_assignment</a></span></code></li><li id="type-operation.Caddi" class="def variant constructor anchored"><a href="#type-operation.Caddi" class="anchor"></a><code><span>| </span><span><span class="constructor">Caddi</span></span></code></li><li id="type-operation.Csubi" class="def variant constructor anchored"><a href="#type-operation.Csubi" class="anchor"></a><code><span>| </span><span><span class="constructor">Csubi</span></span></code></li><li id="type-operation.Cmuli" class="def variant constructor anchored"><a href="#type-operation.Cmuli" class="anchor"></a><code><span>| </span><span><span class="constructor">Cmuli</span></span></code></li><li id="type-operation.Cmulhi" class="def variant constructor anchored"><a href="#type-operation.Cmulhi" class="anchor"></a><code><span>| </span><span><span class="constructor">Cmulhi</span></span></code></li><li id="type-operation.Cdivi" class="def variant constructor anchored"><a href="#type-operation.Cdivi" class="anchor"></a><code><span>| </span><span><span class="constructor">Cdivi</span></span></code></li><li id="type-operation.Cmodi" class="def variant constructor anchored"><a href="#type-operation.Cmodi" class="anchor"></a><code><span>| </span><span><span class="constructor">Cmodi</span></span></code></li><li id="type-operation.Cand" class="def variant constructor anchored"><a href="#type-operation.Cand" class="anchor"></a><code><span>| </span><span><span class="constructor">Cand</span></span></code></li><li id="type-operation.Cor" class="def variant constructor anchored"><a href="#type-operation.Cor" class="anchor"></a><code><span>| </span><span><span class="constructor">Cor</span></span></code></li><li id="type-operation.Cxor" class="def variant constructor anchored"><a href="#type-operation.Cxor" class="anchor"></a><code><span>| </span><span><span class="constructor">Cxor</span></span></code></li><li id="type-operation.Clsl" class="def variant constructor anchored"><a href="#type-operation.Clsl" class="anchor"></a><code><span>| </span><span><span class="constructor">Clsl</span></span></code></li><li id="type-operation.Clsr" class="def variant constructor anchored"><a href="#type-operation.Clsr" class="anchor"></a><code><span>| </span><span><span class="constructor">Clsr</span></span></code></li><li id="type-operation.Casr" class="def variant constructor anchored"><a href="#type-operation.Casr" class="anchor"></a><code><span>| </span><span><span class="constructor">Casr</span></span></code></li><li id="type-operation.Ccmpi" class="def variant constructor anchored"><a href="#type-operation.Ccmpi" class="anchor"></a><code><span>| </span><span><span class="constructor">Ccmpi</span> <span class="keyword">of</span> <a href="#type-integer_comparison">integer_comparison</a></span></code></li><li id="type-operation.Caddv" class="def variant constructor anchored"><a href="#type-operation.Caddv" class="anchor"></a><code><span>| </span><span><span class="constructor">Caddv</span></span></code></li><li id="type-operation.Cadda" class="def variant constructor anchored"><a href="#type-operation.Cadda" class="anchor"></a><code><span>| </span><span><span class="constructor">Cadda</span></span></code></li><li id="type-operation.Ccmpa" class="def variant constructor anchored"><a href="#type-operation.Ccmpa" class="anchor"></a><code><span>| </span><span><span class="constructor">Ccmpa</span> <span class="keyword">of</span> <a href="#type-integer_comparison">integer_comparison</a></span></code></li><li id="type-operation.Cnegf" class="def variant constructor anchored"><a href="#type-operation.Cnegf" class="anchor"></a><code><span>| </span><span><span class="constructor">Cnegf</span></span></code></li><li id="type-operation.Cabsf" class="def variant constructor anchored"><a href="#type-operation.Cabsf" class="anchor"></a><code><span>| </span><span><span class="constructor">Cabsf</span></span></code></li><li id="type-operation.Caddf" class="def variant constructor anchored"><a href="#type-operation.Caddf" class="anchor"></a><code><span>| </span><span><span class="constructor">Caddf</span></span></code></li><li id="type-operation.Csubf" class="def variant constructor anchored"><a href="#type-operation.Csubf" class="anchor"></a><code><span>| </span><span><span class="constructor">Csubf</span></span></code></li><li id="type-operation.Cmulf" class="def variant constructor anchored"><a href="#type-operation.Cmulf" class="anchor"></a><code><span>| </span><span><span class="constructor">Cmulf</span></span></code></li><li id="type-operation.Cdivf" class="def variant constructor anchored"><a href="#type-operation.Cdivf" class="anchor"></a><code><span>| </span><span><span class="constructor">Cdivf</span></span></code></li><li id="type-operation.Cfloatofint" class="def variant constructor anchored"><a href="#type-operation.Cfloatofint" class="anchor"></a><code><span>| </span><span><span class="constructor">Cfloatofint</span></span></code></li><li id="type-operation.Cintoffloat" class="def variant constructor anchored"><a href="#type-operation.Cintoffloat" class="anchor"></a><code><span>| </span><span><span class="constructor">Cintoffloat</span></span></code></li><li id="type-operation.Ccmpf" class="def variant constructor anchored"><a href="#type-operation.Ccmpf" class="anchor"></a><code><span>| </span><span><span class="constructor">Ccmpf</span> <span class="keyword">of</span> <a href="#type-float_comparison">float_comparison</a></span></code></li><li id="type-operation.Craise" class="def variant constructor anchored"><a href="#type-operation.Craise" class="anchor"></a><code><span>| </span><span><span class="constructor">Craise</span> <span class="keyword">of</span> <a href="../Lambda/index.html#type-raise_kind">Lambda.raise_kind</a></span></code></li><li id="type-operation.Ccheckbound" class="def variant constructor anchored"><a href="#type-operation.Ccheckbound" class="anchor"></a><code><span>| </span><span><span class="constructor">Ccheckbound</span></span></code></li><li id="type-operation.Copaque" class="def variant constructor anchored"><a href="#type-operation.Copaque" class="anchor"></a><code><span>| </span><span><span class="constructor">Copaque</span></span></code></li><li id="type-operation.Cdls_get" class="def variant constructor anchored"><a href="#type-operation.Cdls_get" class="anchor"></a><code><span>| </span><span><span class="constructor">Cdls_get</span></span></code></li></ol></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-expression"><a href="#type-expression" class="anchor"></a><code><span><span class="keyword">and</span> expression</span><span> = </span></code><ol><li id="type-expression.Cconst_int" class="def variant constructor anchored"><a href="#type-expression.Cconst_int" class="anchor"></a><code><span>| </span><span><span class="constructor">Cconst_int</span> <span class="keyword">of</span> int * <a href="../Debuginfo/index.html#type-t">Debuginfo.t</a></span></code></li><li id="type-expression.Cconst_natint" class="def variant constructor anchored"><a href="#type-expression.Cconst_natint" class="anchor"></a><code><span>| </span><span><span class="constructor">Cconst_natint</span> <span class="keyword">of</span> nativeint * <a href="../Debuginfo/index.html#type-t">Debuginfo.t</a></span></code></li><li id="type-expression.Cconst_float" class="def variant constructor anchored"><a href="#type-expression.Cconst_float" class="anchor"></a><code><span>| </span><span><span class="constructor">Cconst_float</span> <span class="keyword">of</span> float * <a href="../Debuginfo/index.html#type-t">Debuginfo.t</a></span></code></li><li id="type-expression.Cconst_symbol" class="def variant constructor anchored"><a href="#type-expression.Cconst_symbol" class="anchor"></a><code><span>| </span><span><span class="constructor">Cconst_symbol</span> <span class="keyword">of</span> string * <a href="../Debuginfo/index.html#type-t">Debuginfo.t</a></span></code></li><li id="type-expression.Cvar" class="def variant constructor anchored"><a href="#type-expression.Cvar" class="anchor"></a><code><span>| </span><span><span class="constructor">Cvar</span> <span class="keyword">of</span> <a href="../Backend_var/index.html#type-t">Backend_var.t</a></span></code></li><li id="type-expression.Clet" class="def variant constructor anchored"><a href="#type-expression.Clet" class="anchor"></a><code><span>| </span><span><span class="constructor">Clet</span> <span class="keyword">of</span> <a href="../Backend_var/With_provenance/index.html#type-t">Backend_var.With_provenance.t</a> * <a href="#type-expression">expression</a> * <a href="#type-expression">expression</a></span></code></li><li id="type-expression.Clet_mut" class="def variant constructor anchored"><a href="#type-expression.Clet_mut" class="anchor"></a><code><span>| </span><span><span class="constructor">Clet_mut</span> <span class="keyword">of</span> <a href="../Backend_var/With_provenance/index.html#type-t">Backend_var.With_provenance.t</a> * <a href="#type-machtype">machtype</a> * <a href="#type-expression">expression</a> * <a href="#type-expression">expression</a></span></code></li><li id="type-expression.Cphantom_let" class="def variant constructor anchored"><a href="#type-expression.Cphantom_let" class="anchor"></a><code><span>| </span><span><span class="constructor">Cphantom_let</span> <span class="keyword">of</span> <a href="../Backend_var/With_provenance/index.html#type-t">Backend_var.With_provenance.t</a>
* <span><a href="#type-phantom_defining_expr">phantom_defining_expr</a> option</span>
* <a href="#type-expression">expression</a></span></code></li><li id="type-expression.Cassign" class="def variant constructor anchored"><a href="#type-expression.Cassign" class="anchor"></a><code><span>| </span><span><span class="constructor">Cassign</span> <span class="keyword">of</span> <a href="../Backend_var/index.html#type-t">Backend_var.t</a> * <a href="#type-expression">expression</a></span></code></li><li id="type-expression.Ctuple" class="def variant constructor anchored"><a href="#type-expression.Ctuple" class="anchor"></a><code><span>| </span><span><span class="constructor">Ctuple</span> <span class="keyword">of</span> <span><a href="#type-expression">expression</a> list</span></span></code></li><li id="type-expression.Cop" class="def variant constructor anchored"><a href="#type-expression.Cop" class="anchor"></a><code><span>| </span><span><span class="constructor">Cop</span> <span class="keyword">of</span> <a href="#type-operation">operation</a> * <span><a href="#type-expression">expression</a> list</span> * <a href="../Debuginfo/index.html#type-t">Debuginfo.t</a></span></code></li><li id="type-expression.Csequence" class="def variant constructor anchored"><a href="#type-expression.Csequence" class="anchor"></a><code><span>| </span><span><span class="constructor">Csequence</span> <span class="keyword">of</span> <a href="#type-expression">expression</a> * <a href="#type-expression">expression</a></span></code></li><li id="type-expression.Cifthenelse" class="def variant constructor anchored"><a href="#type-expression.Cifthenelse" class="anchor"></a><code><span>| </span><span><span class="constructor">Cifthenelse</span> <span class="keyword">of</span> <a href="#type-expression">expression</a>
* <a href="../Debuginfo/index.html#type-t">Debuginfo.t</a>
* <a href="#type-expression">expression</a>
* <a href="../Debuginfo/index.html#type-t">Debuginfo.t</a>
* <a href="#type-expression">expression</a>
* <a href="../Debuginfo/index.html#type-t">Debuginfo.t</a></span></code></li><li id="type-expression.Cswitch" class="def variant constructor anchored"><a href="#type-expression.Cswitch" class="anchor"></a><code><span>| </span><span><span class="constructor">Cswitch</span> <span class="keyword">of</span> <a href="#type-expression">expression</a>
* <span>int array</span>
* <span><span>(<a href="#type-expression">expression</a> * <a href="../Debuginfo/index.html#type-t">Debuginfo.t</a>)</span> array</span>
* <a href="../Debuginfo/index.html#type-t">Debuginfo.t</a></span></code></li><li id="type-expression.Ccatch" class="def variant constructor anchored"><a href="#type-expression.Ccatch" class="anchor"></a><code><span>| </span><span><span class="constructor">Ccatch</span> <span class="keyword">of</span> <a href="#type-rec_flag">rec_flag</a>
* <span><span>(int
* <span><span>(<a href="../Backend_var/With_provenance/index.html#type-t">Backend_var.With_provenance.t</a> * <a href="#type-machtype">machtype</a>)</span> list</span>
* <a href="#type-expression">expression</a>
* <a href="../Debuginfo/index.html#type-t">Debuginfo.t</a>)</span>
list</span>
* <a href="#type-expression">expression</a></span></code></li><li id="type-expression.Cexit" class="def variant constructor anchored"><a href="#type-expression.Cexit" class="anchor"></a><code><span>| </span><span><span class="constructor">Cexit</span> <span class="keyword">of</span> int * <span><a href="#type-expression">expression</a> list</span></span></code></li><li id="type-expression.Ctrywith" class="def variant constructor anchored"><a href="#type-expression.Ctrywith" class="anchor"></a><code><span>| </span><span><span class="constructor">Ctrywith</span> <span class="keyword">of</span> <a href="#type-expression">expression</a>
* <a href="../Backend_var/With_provenance/index.html#type-t">Backend_var.With_provenance.t</a>
* <a href="#type-expression">expression</a>
* <a href="../Debuginfo/index.html#type-t">Debuginfo.t</a></span></code></li></ol></div><div class="spec-doc"><p>Every basic block should have a corresponding <code>Debuginfo.t</code> for its beginning.</p></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-codegen_option"><a href="#type-codegen_option" class="anchor"></a><code><span><span class="keyword">type</span> codegen_option</span><span> = </span></code><ol><li id="type-codegen_option.Reduce_code_size" class="def variant constructor anchored"><a href="#type-codegen_option.Reduce_code_size" class="anchor"></a><code><span>| </span><span><span class="constructor">Reduce_code_size</span></span></code></li><li id="type-codegen_option.No_CSE" class="def variant constructor anchored"><a href="#type-codegen_option.No_CSE" class="anchor"></a><code><span>| </span><span><span class="constructor">No_CSE</span></span></code></li></ol></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-fundecl"><a href="#type-fundecl" class="anchor"></a><code><span><span class="keyword">type</span> fundecl</span><span> = </span><span>{</span></code><ol><li id="type-fundecl.fun_name" class="def record field anchored"><a href="#type-fundecl.fun_name" class="anchor"></a><code><span>fun_name : string;</span></code></li><li id="type-fundecl.fun_args" class="def record field anchored"><a href="#type-fundecl.fun_args" class="anchor"></a><code><span>fun_args : <span><span>(<a href="../Backend_var/With_provenance/index.html#type-t">Backend_var.With_provenance.t</a> * <a href="#type-machtype">machtype</a>)</span> list</span>;</span></code></li><li id="type-fundecl.fun_body" class="def record field anchored"><a href="#type-fundecl.fun_body" class="anchor"></a><code><span>fun_body : <a href="#type-expression">expression</a>;</span></code></li><li id="type-fundecl.fun_codegen_options" class="def record field anchored"><a href="#type-fundecl.fun_codegen_options" class="anchor"></a><code><span>fun_codegen_options : <span><a href="#type-codegen_option">codegen_option</a> list</span>;</span></code></li><li id="type-fundecl.fun_poll" class="def record field anchored"><a href="#type-fundecl.fun_poll" class="anchor"></a><code><span>fun_poll : <a href="../Lambda/index.html#type-poll_attribute">Lambda.poll_attribute</a>;</span></code></li><li id="type-fundecl.fun_dbg" class="def record field anchored"><a href="#type-fundecl.fun_dbg" class="anchor"></a><code><span>fun_dbg : <a href="../Debuginfo/index.html#type-t">Debuginfo.t</a>;</span></code></li></ol><code><span>}</span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-data_item"><a href="#type-data_item" class="anchor"></a><code><span><span class="keyword">type</span> data_item</span><span> = </span></code><ol><li id="type-data_item.Cdefine_symbol" class="def variant constructor anchored"><a href="#type-data_item.Cdefine_symbol" class="anchor"></a><code><span>| </span><span><span class="constructor">Cdefine_symbol</span> <span class="keyword">of</span> string</span></code></li><li id="type-data_item.Cglobal_symbol" class="def variant constructor anchored"><a href="#type-data_item.Cglobal_symbol" class="anchor"></a><code><span>| </span><span><span class="constructor">Cglobal_symbol</span> <span class="keyword">of</span> string</span></code></li><li id="type-data_item.Cint8" class="def variant constructor anchored"><a href="#type-data_item.Cint8" class="anchor"></a><code><span>| </span><span><span class="constructor">Cint8</span> <span class="keyword">of</span> int</span></code></li><li id="type-data_item.Cint16" class="def variant constructor anchored"><a href="#type-data_item.Cint16" class="anchor"></a><code><span>| </span><span><span class="constructor">Cint16</span> <span class="keyword">of</span> int</span></code></li><li id="type-data_item.Cint32" class="def variant constructor anchored"><a href="#type-data_item.Cint32" class="anchor"></a><code><span>| </span><span><span class="constructor">Cint32</span> <span class="keyword">of</span> nativeint</span></code></li><li id="type-data_item.Cint" class="def variant constructor anchored"><a href="#type-data_item.Cint" class="anchor"></a><code><span>| </span><span><span class="constructor">Cint</span> <span class="keyword">of</span> nativeint</span></code></li><li id="type-data_item.Csingle" class="def variant constructor anchored"><a href="#type-data_item.Csingle" class="anchor"></a><code><span>| </span><span><span class="constructor">Csingle</span> <span class="keyword">of</span> float</span></code></li><li id="type-data_item.Cdouble" class="def variant constructor anchored"><a href="#type-data_item.Cdouble" class="anchor"></a><code><span>| </span><span><span class="constructor">Cdouble</span> <span class="keyword">of</span> float</span></code></li><li id="type-data_item.Csymbol_address" class="def variant constructor anchored"><a href="#type-data_item.Csymbol_address" class="anchor"></a><code><span>| </span><span><span class="constructor">Csymbol_address</span> <span class="keyword">of</span> string</span></code></li><li id="type-data_item.Cstring" class="def variant constructor anchored"><a href="#type-data_item.Cstring" class="anchor"></a><code><span>| </span><span><span class="constructor">Cstring</span> <span class="keyword">of</span> string</span></code></li><li id="type-data_item.Cskip" class="def variant constructor anchored"><a href="#type-data_item.Cskip" class="anchor"></a><code><span>| </span><span><span class="constructor">Cskip</span> <span class="keyword">of</span> int</span></code></li><li id="type-data_item.Calign" class="def variant constructor anchored"><a href="#type-data_item.Calign" class="anchor"></a><code><span>| </span><span><span class="constructor">Calign</span> <span class="keyword">of</span> int</span></code></li></ol></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-phrase"><a href="#type-phrase" class="anchor"></a><code><span><span class="keyword">type</span> phrase</span><span> = </span></code><ol><li id="type-phrase.Cfunction" class="def variant constructor anchored"><a href="#type-phrase.Cfunction" class="anchor"></a><code><span>| </span><span><span class="constructor">Cfunction</span> <span class="keyword">of</span> <a href="#type-fundecl">fundecl</a></span></code></li><li id="type-phrase.Cdata" class="def variant constructor anchored"><a href="#type-phrase.Cdata" class="anchor"></a><code><span>| </span><span><span class="constructor">Cdata</span> <span class="keyword">of</span> <span><a href="#type-data_item">data_item</a> list</span></span></code></li></ol></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-ccatch"><a href="#val-ccatch" class="anchor"></a><code><span><span class="keyword">val</span> ccatch :
<span><span>(int
* <span><span>(<a href="../Backend_var/With_provenance/index.html#type-t">Backend_var.With_provenance.t</a> * <a href="#type-machtype">machtype</a>)</span> list</span>
* <a href="#type-expression">expression</a>
* <a href="#type-expression">expression</a>
* <a href="../Debuginfo/index.html#type-t">Debuginfo.t</a>)</span> <span class="arrow">&#45;&gt;</span></span>
<a href="#type-expression">expression</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-reset"><a href="#val-reset" class="anchor"></a><code><span><span class="keyword">val</span> reset : <span>unit <span class="arrow">&#45;&gt;</span></span> unit</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-iter_shallow_tail"><a href="#val-iter_shallow_tail" class="anchor"></a><code><span><span class="keyword">val</span> iter_shallow_tail : <span><span>(<span><a href="#type-expression">expression</a> <span class="arrow">&#45;&gt;</span></span> unit)</span> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-expression">expression</a> <span class="arrow">&#45;&gt;</span></span> bool</span></code></div><div class="spec-doc"><p>Either apply the callback to all immediate sub-expressions that can produce the final result for the expression and return <code>true</code>, or do nothing and return <code>false</code>. Note that the notion of &quot;tail&quot; sub-expression used here does not match the one used to trigger tail calls; in particular, try...with handlers are considered to be in tail position (because their result become the final result for the expression).</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-map_tail"><a href="#val-map_tail" class="anchor"></a><code><span><span class="keyword">val</span> map_tail : <span><span>(<span><a href="#type-expression">expression</a> <span class="arrow">&#45;&gt;</span></span> <a href="#type-expression">expression</a>)</span> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-expression">expression</a> <span class="arrow">&#45;&gt;</span></span> <a href="#type-expression">expression</a></span></code></div><div class="spec-doc"><p>Apply the transformation to an expression, trying to push it to all inner sub-expressions that can produce the final result. Same disclaimer as for <code>iter_shallow_tail</code> about the notion of &quot;tail&quot; sub-expression.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-map_shallow"><a href="#val-map_shallow" class="anchor"></a><code><span><span class="keyword">val</span> map_shallow : <span><span>(<span><a href="#type-expression">expression</a> <span class="arrow">&#45;&gt;</span></span> <a href="#type-expression">expression</a>)</span> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-expression">expression</a> <span class="arrow">&#45;&gt;</span></span> <a href="#type-expression">expression</a></span></code></div><div class="spec-doc"><p>Apply the transformation to each immediate sub-expression.</p></div></div></div></body></html>