package bap-std
PHI-node
Phi nodes are used to represent a set of values that can be assigned to a given variable depending on a control flow path taken. Phi nodes should occur only in blocks that has more than one incoming edge, i.e., in blocks to which there is a transfer of control flow from more than one block.
Each element of a phi-node corresponds to a particular incoming edge.
val reify :
?tid:tid ->
'a Bap_core_theory.Theory.var ->
(tid * 'a Bap_core_theory.Theory.value) list ->
t
reify v xs
reifies Core Theory terms into the phi term.
val var : t -> unit Bap_core_theory.Theory.var
var phi
is the left-hand-side of the phi
term.
val options : t -> (tid * unit Bap_core_theory.Theory.value) seq
options def
returns a list of possible values the term can take.
Values are predicated with the term identifiers of the paths (denoted by the tid of the predecessor)
create var label exp
creates a phi-node that associates a variable var
with an expression exp
. This expression should be selected if a control flow enters a block, that owns this phi-node from a block labeled with label
. Example, create x loop_header y
.
of_list var bindings
creates a phi-node, that for each pair of label,exp
in the bindings
list associates variable var
with expression exp
if control flow reaches this point via block labeled with label
.
free_vars t
returns a set of variables that occur free on the right hand side of the phi-node. See Exp.free_vars
for clarification on what variables are considered free.
map_exp t ~f
applies f
to all expressions on the right hand side of a phi-node t
substitute phi x y
substitutes x
by y
in all right hand-side expressions of the phi
node.
update phi label exp
associates expression exp
with a control flow path labeled with label
.
select phi label
takes the value corresponding to a control flow path marked with label
.
select_or_unknown phi label
is exp
if select phi label = Some exp
, otherwise returns a Bil.unknown
expression.
val pp_slots : string list -> Stdlib.Format.formatter -> t -> unit
pp_slots names
prints slots that are in names
.
include Regular.Std.Regular.S with type t := t
val bin_size_t : t Bin_prot.Size.sizer
val bin_write_t : t Bin_prot.Write.writer
val bin_read_t : t Bin_prot.Read.reader
val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
val bin_writer_t : t Bin_prot.Type_class.writer
val bin_reader_t : t Bin_prot.Type_class.reader
val bin_t : t Bin_prot.Type_class.t
val t_of_sexp : Sexplib0__.Sexp.t -> t
val sexp_of_t : t -> Sexplib0__.Sexp.t
val to_string : t -> string
val str : unit -> t -> string
val pps : unit -> t -> string
val ppo : Core_kernel.Out_channel.t -> t -> unit
val pp_seq : Stdlib.Format.formatter -> t Core_kernel.Sequence.t -> unit
val pp : Base__.Formatter.t -> t -> unit
module Replace_polymorphic_compare : sig ... end
val comparator : (t, comparator_witness) Core_kernel__Comparator.comparator
module Map : sig ... end
module Set : sig ... end
val hash_fold_t :
Ppx_hash_lib.Std.Hash.state ->
t ->
Ppx_hash_lib.Std.Hash.state
val hash : t -> Ppx_hash_lib.Std.Hash.hash_value
val hashable : t Core_kernel__.Hashtbl.Hashable.t
module Table : sig ... end
module Hash_set : sig ... end
module Hash_queue : sig ... end
val size_in_bytes : ?ver:string -> ?fmt:string -> t -> int
val of_bytes : ?ver:string -> ?fmt:string -> Regular.Std.bytes -> t
val to_bytes : ?ver:string -> ?fmt:string -> t -> Regular.Std.bytes
val blit_to_bytes :
?ver:string ->
?fmt:string ->
Regular.Std.bytes ->
t ->
int ->
unit
val of_bigstring : ?ver:string -> ?fmt:string -> Core_kernel.bigstring -> t
val to_bigstring : ?ver:string -> ?fmt:string -> t -> Core_kernel.bigstring
val blit_to_bigstring :
?ver:string ->
?fmt:string ->
Core_kernel.bigstring ->
t ->
int ->
unit
module Io : sig ... end
module Cache : sig ... end
val add_reader :
?desc:string ->
ver:string ->
string ->
t Regular.Std.reader ->
unit
val add_writer :
?desc:string ->
ver:string ->
string ->
t Regular.Std.writer ->
unit
val available_readers : unit -> info list
val default_reader : unit -> info
val available_writers : unit -> info list
val default_writer : unit -> info
val default_printer : unit -> info option
val find_reader : ?ver:string -> string -> t Regular.Std.reader option
val find_writer : ?ver:string -> string -> t Regular.Std.writer option