Module Mlang.Oir
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;
}
module CFG : Graph.Sig.P with type CFG.V.t = int
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