open DNList open DPow open DProd open DSum open DUnit open Datatypes open Fold open Global open InterNode open IntraNode open TStr type __ = Obj.t module Proc = DStr.DStr module PowProc = Pow(Proc) module GVar = DStr.DStr module LVar = ProdKey2(Proc)(DStr.DStr) module Var = SumKey2(GVar)(LVar) module Field = DStr.DStr module Fields = NListKey(Field) module ExtAllocsite = SumKey2(Unit)(Proc) module Allocsite = SumKey2(InterNode)(ExtAllocsite) module VarAllocsite = SumKey2(Var)(Allocsite) module FldLoc = ProdKey2(VarAllocsite)(Fields) module Loc = SumKey2(FldLoc)(Proc) module PowLoc = Pow(Loc) (** val var_of_gvar : GVar.t -> Var.t **) let var_of_gvar x = Var.Inl x (** val var_of_lvar : LVar.t -> Var.t **) let var_of_lvar x = Var.Inr x (** val approx_one_loc : G.t -> Loc.t -> bool **) let approx_one_loc g = function | Loc.Inl a -> let (t0, t1) = a in (match t0 with | VarAllocsite.Inl a0 -> (match a0 with | Var.Inl _ -> (match t1 with | Fields.Coq_nil -> true | Fields.Coq_cons (_, _) -> false) | Var.Inr b -> let (f, _) = b in (match t1 with | Fields.Coq_nil -> negb (G.is_rec f g) | Fields.Coq_cons (_, _) -> false)) | VarAllocsite.Inr _ -> false) | Loc.Inr _ -> false (** val is_local_of : DStr.DStr.t -> Loc.t' -> bool **) let is_local_of f = function | Loc.Inl a -> let (t0, _) = a in (match t0 with | VarAllocsite.Inl a0 -> (match a0 with | Var.Inl _ -> false | Var.Inr b -> let (g, _) = b in if DStr.DStr.eq_dec f g then true else false) | VarAllocsite.Inr _ -> false) | Loc.Inr _ -> false (** val loc_of_var : Var.t -> Loc.t **) let loc_of_var x = Loc.Inl ((VarAllocsite.Inl x), Fields.Coq_nil) (** val loc_of_allocsite : Allocsite.t -> Loc.t **) let loc_of_allocsite x = Loc.Inl ((VarAllocsite.Inr x), Fields.Coq_nil) (** val loc_of_proc : Proc.t -> Loc.t **) let loc_of_proc x = Loc.Inr x (** val append_field : Loc.t -> Field.t -> Loc.t **) let append_field l f = match l with | Loc.Inl va -> Loc.Inl ((fst va), (Fields.app (snd va) f)) | Loc.Inr _ -> l module SMLocLoc = SetMap(Loc)(PowLoc)(Loc)(PowLoc) (** val pow_loc_append_field : PowLoc.t -> Field.t -> PowLoc.t **) let pow_loc_append_field ls f = SMLocLoc.map (fun l -> append_field l f) ls (** val allocsite_of_node : InterNode.t -> Allocsite.t **) let allocsite_of_node node = Allocsite.Inl node (** val allocsite_of_ext : Proc.t option -> Allocsite.t **) let allocsite_of_ext = function | Some fid -> Allocsite.Inr (ExtAllocsite.Inr fid) | None -> Allocsite.Inr (ExtAllocsite.Inl ())