SSA_Transformation.Domain
The actual transformation functor
module S : SSA_Domain
include Doc
module SSA_State = S.SSA_State
module StateBindingsSet = S.StateBindingsSet
Set of states and bindings (phi variables).
val assume : Ast.Program.SSAExpr.t -> SSA_State.t -> SSA_State.t option
similar to apply
, assume e s
returns the state obtained from s
when assuming that e
is non-zero. None
means e
is always zero
val join : StateBindingsSet.t -> SSA_State.t option
Join the given states.
None
on empty setval entrypoint : Ast.Program.Var.t list -> SSA_State.t
Domain entrypoint, with a list of initial variables in scope
val is_included : Ast.Program.Loc.t -> SSA_State.t -> SSA_State.t -> bool
is_included l s1 s2
is true
is s1
included in s2
according to the domain order at l
. Used to know the fixpoint has been reached.
val join_and_widen :
Ast.Program.Loc.t ->
SSA_State.t ->
StateBindingsSet.t ->
SSA_State.t option
Performs both join and widening simultaneously. This simplifies numbering the new states.
val query_truth_value :
(SSA_State.t ->
Ast.Program.SSAExpr.t ->
Single_value_abstraction.Ternary.t)
option
Possible truth value of the given expression None
when the domain provides no useful data
val query_is_constant :
(SSA_State.t -> Ast.Program.SSAExpr.t -> Z.t option) option
query_is_constant state expr
is Some z
only if we can prove that expr
is equal to constant z
in the given state None
when the domain provides no useful data