Module Mlang.Oir

type block_id = int
module BlockMap : MapExt.T with type T.key = block_id
type stmt = stmt_kind Pos.marked
and stmt_kind =
| SAssign of Bir.variable * Bir.variable_def
| SConditional of Bir.expression * block_id * block_id * block_id
| SVerif of Bir.condition_data
| SGoto of block_id
| SRovCall of Bir.rov_id
| SFunctionCall of Bir.function_name * Mir.Variable.t list
type block = stmt list
type cfg = {
blocks : block BlockMap.t;
entry_block : block_id;
exit_block : block_id;
}
type mpp_function = {
cfg : cfg;
is_verif : bool;
}
type rov_code =
| Rule of cfg
| Verif of cfg
type rov = {
id : Bir.rov_id;
name : string Pos.marked;
code : rov_code;
}
type program = {
mpp_functions : mpp_function Mlang.Bir.FunctionMap.t;
rules_and_verifs : rov Mlang.Bir.ROVMap.t;
idmap : Mir.idmap;
mir_program : Mir.program;
outputs : unit Mlang.Bir.VariableMap.t;
main_function : Bir.function_name;
context : Bir.program_context option;
}
val map_program_cfgs : (cfg -> cfg) -> program -> program
val count_instr : program -> int
module CFG : Graph.Sig.P with type CFG.V.t = int
val get_cfg : cfg -> CFG.t
module Topological : sig ... end
module Dominators : Graph.Dominator.S with type Dominators.vertex = int and type Dominators.t = CFG.t
module Paths : sig ... end
module Reachability : sig ... end