Cfg_intf.Stype external_call_operation = {func_symbol : string;alloc : bool;effects : Cmm.effects;ty_res : Cmm.machtype;ty_args : Cmm.exttype list;stack_ofs : int;stack_align : Cmm.stack_align;}type int_test = {lt : Label.t;if x < y (resp. x < n) goto lt label
eq : Label.t;if x = y (resp. x = n) goto eq label
gt : Label.t;if x > y (resp. x > n) goto gt label
is_signed : Scalar.Signedness.t;imm : int option;}int_test represents all possible outcomes of a comparison between two integers. When imm field is None, compare variables x and y, specified by the arguments of the enclosing instruction. When imm field is Some n, compare variable x and immediate n. This corresponds to Mach.Iinttest and Mach.Iinttest_imm in the compiler.
type float_test = {width : Cmm.float_width;lt : Label.t;eq : Label.t;gt : Label.t;uo : Label.t;if at least one of x or y is NaN
*)}float_test represents possible outcomes of comparison between arguments x and y of type float. It is not enough to check "=,<,>" because possible outcomes of comparison include "unordered" (see e.g. x86-64 emitter) when the arguments involve NaNs.
type 'a instruction = {desc : 'a;id : InstructionId.t;mutable arg : Reg.t array;mutable res : Reg.t array;mutable dbg : Debuginfo.t;mutable fdo : Fdo_info.t;mutable live : Reg.Set.t;mutable stack_offset : int;mutable available_before : Reg_availability_set.t;mutable available_across : Reg_availability_set.t;The availability sets will be set to Unreachable prior to the availability analysis having run.
}type basic = | Op of Operation.t| ReloadretaddrThis instruction loads the return address from a predefined hidden address (e.g. bottom of the current frame) and stores it in a special hidden register. It can use standard registers for that purpose. They are defined in Proc.destroyed_at_reloadretaddr.
| Pushtrap of {lbl_handler : Label.t;}| Poptrap of {lbl_handler : Label.t;}| Prologue| Epilogue| Stack_check of {}type terminator = | Never| Always of Label.t| Parity_test of bool_testCheck if the argument is even or odd
*)| Truth_test of bool_testCheck if the argument is true or false.
*)| Float_test of float_test| Int_test of int_test| Switch of Label.t array| Return| Raise of Lambda.raise_kind| Tailcall_self of {destination : Label.t;}| Tailcall_func of func_call_operation| Call_no_return of external_call_operation| Invalid of {message : string;stack_ofs : int;stack_align : Cmm.stack_align;label_after : Label.t Option.t;}| Call of func_call_operation with_label_after| Prim of prim_call_operation with_label_after