Module Cfg_intf.S
type 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
*)ltlabeleq : Label.t;(*if x = y (resp. x = n) goto
*)eqlabelgt : Label.t;(*if x > y (resp. x > n) goto
*)gtlabelis_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
*)Unreachableprior to the availability analysis having run.
}type basic = | Op of Operation.t| Reloadretaddr(*This 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 Cfg_intf.S.bool_test(*Check if the argument is even or odd
*)| Truth_test of Cfg_intf.S.bool_test(*Check if the argument is true or false.
*)| Float_test of Cfg_intf.S.float_test| Int_test of Cfg_intf.S.int_test| Switch of Label.t array| Return| Raise of Lambda.raise_kind| Tailcall_self of {destination : Label.t;
}| Tailcall_func of Cfg_intf.S.func_call_operation| Call_no_return of Cfg_intf.S.external_call_operation| Call of Cfg_intf.S.func_call_operation Cfg_intf.S.with_label_after| Prim of Cfg_intf.S.prim_call_operation Cfg_intf.S.with_label_after