Module InferModules.Control
module LoopHead = InferIR.Procdesc.Nodemodule LoopHeads = InferIR.Procdesc.NodeSetmodule ControlMap : module type of sig ... endMap control var -> loop head location
module GuardNodes : module type of sig ... endmodule ExitNodeToLoopHeads = InferIR.Procdesc.NodeMapMap exit node -> loop head set
module LoopHeadToGuardNodes = InferIR.Procdesc.NodeMapMap loop head -> prune nodes in the loop guard
type invariant_maptype loop_control_maps={exit_map : LoopHeads.t ExitNodeToLoopHeads.t;loop_head_to_guard_nodes : GuardNodes.t LoopHeadToGuardNodes.t;}
val compute_invariant_map : Summary.t -> InferIR.Tenv.t -> loop_control_maps -> invariant_mapval compute_control_vars : invariant_map -> LoopInvariant.VarsInLoop.t LoopHeadToGuardNodes.t -> LoopHead.t -> InferBase.Location.t ControlMap.t