Module Numeric.SSA

Non relational numeric abstraction for SSA. Unlike Classical, which only remembers abstractions for variables, this also remembers abstractions for sub-expressions, which is possible at a reasonable cost thanks to the static assignement properties of SSA.

Its command line id is N (under Lift or LiftGVN).

Parameters

Signature

include Sig.SSA_Domain with type SSA_State.t = Zs.t Ast.Program.SSAExpr.Map.t
include Sig.Doc
val id : string

Unique identifier for the domain, eg "N", "FA",...

val name : Stdlib.Format.formatter -> unit -> unit

Full human readable name

val state_name : string

Name of the domain's states

val doc : string

Long description of the domain

Domain types

Set of states and bindings (phi variables).

Domain operations

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

  • raises Division_by_zero
val join : StateBindingsSet.t -> SSA_State.t option

Join the given states.

  • None on empty set
  • the unique element on the singleton set (bindings are discarded)
val 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.

Queries

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

val expr_forwards : SSA_State.t -> Ast.Program.SSAExpr.t -> Zs.t

expr_forwards state expr returns the best abstraction for the value of expr in the given state.