Checkers.Controlmodule LoopHead = IR.Procdesc.Nodemodule LoopHeads = IR.Procdesc.NodeSetmodule ControlMap : sig ... endMap control var -> loop head location
module GuardNodes : Absint.AbstractDomain.NodeSetSmodule ExitNodeToLoopHeads = IR.Procdesc.NodeMapMap exit node -> loop head set
module LoopHeadToGuardNodes = IR.Procdesc.NodeMapMap loop head -> prune nodes in the loop guard
type loop_control_maps = {exit_map : LoopHeads.t ExitNodeToLoopHeads.t;loop_head_to_guard_nodes : GuardNodes.t LoopHeadToGuardNodes.t;}val compute_invariant_map : IR.Procdesc.t -> loop_control_maps -> invariant_mapval compute_control_vars :
invariant_map ->
LoopInvariant.VarsInLoop.t LoopHeadToGuardNodes.t ->
LoopHead.t ->
IBase.Location.t ControlMap.t