ocaml/asmcomp/debug/reg_with_debug_info.mli

113 lines
3.5 KiB
OCaml

(**************************************************************************)
(* *)
(* OCaml *)
(* *)
(* Mark Shinwell, Jane Street Europe *)
(* *)
(* Copyright 2016--2017 Jane Street Group LLC *)
(* *)
(* All rights reserved. This file is distributed under the terms of *)
(* the GNU Lesser General Public License version 2.1, with the *)
(* special exception on linking described in the file LICENSE. *)
(* *)
(**************************************************************************)
(** Registers equipped with information used for generating debugging
information. *)
module Debug_info : sig
type t
val compare : t -> t -> int
val holds_value_of : t -> Backend_var.t
(** The identifier that the register holds (part of) the value of. *)
val part_of_value : t -> int
val num_parts_of_value : t -> int
val which_parameter : t -> int option
(** If the register corresponds to a function parameter, the value returned
is the zero-based index of said parameter; otherwise it is [None]. *)
val provenance : t -> unit option
end
type t
type reg_with_debug_info = t
val create
: reg:Reg.t
-> holds_value_of:Backend_var.t
-> part_of_value:int
-> num_parts_of_value:int
-> which_parameter:int option
-> provenance:unit option
-> t
val create_with_debug_info : reg:Reg.t -> debug_info:Debug_info.t option -> t
val create_without_debug_info : reg:Reg.t -> t
val create_copying_debug_info : reg:Reg.t -> debug_info_from:t -> t
val reg : t -> Reg.t
val location : t -> Reg.location
val debug_info : t -> Debug_info.t option
val at_same_location : t -> Reg.t -> register_class:(Reg.t -> int) -> bool
(** [at_same_location t reg] holds iff the register [t] corresponds to
the same (physical or pseudoregister) location as the register [reg],
which is not equipped with debugging information.
[register_class] should be [Proc.register_class].
*)
val holds_pointer : t -> bool
val holds_non_pointer : t -> bool
val assigned_to_stack : t -> bool
(** [assigned_to_stack t] holds iff the location of [t] is a hard stack
slot. *)
val clear_debug_info : t -> t
module Set_distinguishing_names_and_locations
: Set.S with type elt = t
module Map_distinguishing_names_and_locations
: Map.S with type key = t
module Set : sig
include Set.S with type elt = t
val of_array : reg_with_debug_info array -> t
val mem_reg : t -> Reg.t -> bool
val find_reg_exn : t -> Reg.t -> reg_with_debug_info
val filter_reg : t -> Reg.t -> t
val forget_debug_info : t -> Reg.Set.t
val without_debug_info : Reg.Set.t -> t
val made_unavailable_by_clobber
: t
-> regs_clobbered:Reg.t array
-> register_class:(Reg.t -> int)
-> t
(** [made_unavailable_by_clobber t ~regs_clobbered ~register_class] returns
the largest subset of [t] whose locations do not overlap with any
registers in [regs_clobbered]. (Think of [t] as a set of available
registers.)
[register_class] should always be [Proc.register_class]. *)
end
val print
: print_reg:(Format.formatter -> Reg.t -> unit)
-> Format.formatter
-> t
-> unit