Module InferModules.LoopInvariant

module InvariantVars : module type of sig ... end
module VarsInLoop : module type of sig ... end
module LoopNodes : module type of sig ... end
module VarSet : module type of sig ... end
module LoopHeadToLoopNodes = InferIR.Procdesc.NodeMap

Map loop header node -> all nodes in the loop

module LoopHeadToInvVars = InferIR.Procdesc.NodeMap

Map loop head -> invariant vars in loop

type invariant_map = VarsInLoop.t InferIR.Procdesc.NodeMap.t
val get_inv_vars_in_loop : InferIR.Tenv.t -> ReachingDefs.invariant_map -> is_pure_by_default:bool -> get_callee_purity:(InferIR.Typ.Procname.t -> PurityDomain.ModifiedParamIndices.t AbstractDomain.Types.top_lifted InferStdlib.IStd.sexp_option) -> InferIR.Procdesc.Node.t -> LoopNodes.t -> VarSet.t
val get_loop_inv_var_map : InferIR.Tenv.t -> (InferIR.Typ.Procname.t -> PurityDomain.ModifiedParamIndices.t AbstractDomain.Types.top_lifted InferStdlib.IStd.sexp_option) -> ReachingDefs.invariant_map -> LoopNodes.t LoopHeadToInvVars.t -> invariant_map