sig
type 't action =
't Dataflow.action =
Default
| Done of 't
| Post of ('t -> 't)
type 't stmtaction = 't Dataflow.stmtaction = SDefault | SDone | SUse of 't
type 't guardaction =
't Dataflow.guardaction =
GDefault
| GUse of 't
| GUnreachable
module type StmtStartData =
sig
type data
val clear : unit -> unit
val mem : Cil_types.stmt -> bool
val find : Cil_types.stmt -> data
val replace : Cil_types.stmt -> data -> unit
val add : Cil_types.stmt -> data -> unit
val iter : (Cil_types.stmt -> data -> unit) -> unit
val length : unit -> int
end
module StartData :
functor (X : sig type t val size : int end) ->
sig
type data = X.t
val clear : unit -> unit
val mem : Cil_types.stmt -> bool
val find : Cil_types.stmt -> data
val replace : Cil_types.stmt -> data -> unit
val add : Cil_types.stmt -> data -> unit
val iter : (Cil_types.stmt -> data -> unit) -> unit
val length : unit -> int
end
module type ForwardsTransfer =
sig
val name : string
val debug : bool ref
type t
val copy : t -> t
val pretty : Format.formatter -> t -> unit
val computeFirstPredecessor : Cil_types.stmt -> t -> t
val combinePredecessors : Cil_types.stmt -> old:t -> t -> t option
val doInstr : Cil_types.stmt -> Cil_types.instr -> t -> t action
val doGuard :
Cil_types.stmt -> Cil_types.exp -> t -> t guardaction * t guardaction
val doStmt : Cil_types.stmt -> t -> t stmtaction
val filterStmt : Cil_types.stmt -> bool
val stmt_can_reach : Cil_types.stmt -> Cil_types.stmt -> bool
val doEdge : Cil_types.stmt -> Cil_types.stmt -> t -> t
module StmtStartData :
sig
type data = t
val clear : unit -> unit
val mem : Cil_types.stmt -> bool
val find : Cil_types.stmt -> data
val replace : Cil_types.stmt -> data -> unit
val add : Cil_types.stmt -> data -> unit
val iter : (Cil_types.stmt -> data -> unit) -> unit
val length : unit -> int
end
end
module Forwards :
functor (T : ForwardsTransfer) ->
sig
val reachedStatement :
Cil_types.stmt -> Cil_types.stmt -> T.t -> unit
val compute : Cil_types.stmt list -> unit
val worklist : Cil_types.stmt Queue.t
end
module type BackwardsTransfer =
sig
val name : string
val debug : bool ref
type t
val pretty : Format.formatter -> t -> unit
val funcExitData : t
val combineStmtStartData : Cil_types.stmt -> old:t -> t -> t option
val combineSuccessors : t -> t -> t
val doStmt : Cil_types.stmt -> t action
val doInstr : Cil_types.stmt -> Cil_types.instr -> t -> t action
val filterStmt : Cil_types.stmt -> Cil_types.stmt -> bool
val stmt_can_reach : Cil_types.stmt -> Cil_types.stmt -> bool
module StmtStartData :
sig
type data = t
val clear : unit -> unit
val mem : Cil_types.stmt -> bool
val find : Cil_types.stmt -> data
val replace : Cil_types.stmt -> data -> unit
val add : Cil_types.stmt -> data -> unit
val iter : (Cil_types.stmt -> data -> unit) -> unit
val length : unit -> int
end
end
module Backwards :
functor (T : BackwardsTransfer) ->
sig val compute : Cil_types.stmt list -> unit end
val find_stmts :
Cil_types.fundec -> Cil_types.stmt list * Cil_types.stmt list
end