sig
  module Hashtbl :
    sig
      type key = Call_site.t
      type 'a t = 'Hashtbl.Make(Call_site).t
      val create : int -> 'a t
      val clear : 'a t -> unit
      val reset : 'a t -> unit
      val copy : 'a t -> 'a t
      val add : 'a t -> key -> '-> unit
      val remove : 'a t -> key -> unit
      val find : 'a t -> key -> 'a
      val find_all : 'a t -> key -> 'a list
      val replace : 'a t -> key -> '-> unit
      val mem : 'a t -> key -> bool
      val iter : (key -> '-> unit) -> 'a t -> unit
      val fold : (key -> '-> '-> 'b) -> 'a t -> '-> 'b
      val length : 'a t -> int
      val stats : 'a t -> Hashtbl.statistics
    end
  type elt = { mutable self : perf_info; subtree : t; }
  and t = elt Hashtbl.t
  val empty : unit -> 'Hashtbl.t
  val reset : 'Hashtbl.t -> unit
  val create_node : perf_info -> elt
  val find_subtree : elt Hashtbl.t -> Hashtbl.key list -> elt option -> elt
  val find_subtree : elt Hashtbl.t -> Hashtbl.key list -> elt
  val find : elt Hashtbl.t -> Hashtbl.key list -> perf_info
  val _add : elt Hashtbl.t -> Hashtbl.key list -> perf_info -> unit
  val _update :
    elt Hashtbl.t -> Hashtbl.key list -> (perf_info -> perf_info) -> unit
end