Skip to content
Snippets Groups Projects
Commit 2d7c68c8 authored by Cécile Ruet-Cros's avatar Cécile Ruet-Cros
Browse files

[region] footprint: requested modifs

parent 4b71143e
No related branches found
No related tags found
No related merge requests found
...@@ -52,8 +52,4 @@ let exp m e = Option.map (Memory.node m) @@ Memory.exp m e ...@@ -52,8 +52,4 @@ let exp m e = Option.map (Memory.node m) @@ Memory.exp m e
let cvar = Memory.cvar let cvar = Memory.cvar
let field = Memory.field let field = Memory.field
let index = Memory.index let index = Memory.index
let footprint = Memory.footprint
module SNode = Memory.SNode
let footprint m r : SNode.t = Memory.footprint m r
...@@ -67,12 +67,6 @@ val node : map -> node -> node ...@@ -67,12 +67,6 @@ val node : map -> node -> node
(** Normalized list of nodes (normalized, uniques, sorted by id) *) (** Normalized list of nodes (normalized, uniques, sorted by id) *)
val nodes : map -> node list -> node list val nodes : map -> node list -> node list
(** Node sets *)
module SNode : sig
val update_map : map -> unit
include Set.S with type elt = node
end
(** {2 Region Properties} (** {2 Region Properties}
All functions in this section provide normalized nodes All functions in this section provide normalized nodes
...@@ -144,4 +138,4 @@ val field : map -> node -> fieldinfo -> node ...@@ -144,4 +138,4 @@ val field : map -> node -> fieldinfo -> node
val index : map -> node -> typ -> node val index : map -> node -> typ -> node
(** Unormalized. *) (** Unormalized. *)
val footprint : map -> node -> SNode.t val footprint : map -> node -> node list
...@@ -180,17 +180,10 @@ let update (m: map) (n: node) (f: chunk -> chunk) = ...@@ -180,17 +180,10 @@ let update (m: map) (n: node) (f: chunk -> chunk) =
(* --- Nodes Set --- *) (* --- Nodes Set --- *)
(* -------------------------------------------------------------------------- *) (* -------------------------------------------------------------------------- *)
module SNode = struct module SNode = Set.Make(struct
let map : map ref = ref (create ()) type t = node
let update_map m = map := m let compare r1 r2 = Int.compare (id r1) (id r2)
end)
include Set.Make(struct
type t = node
let compare r1 r2 =
if equal !map r1 r2 then 0
else id (node !map r1) - id (node !map r2)
end)
end
(* -------------------------------------------------------------------------- *) (* -------------------------------------------------------------------------- *)
(* --- Chunk Constructors --- *) (* --- Chunk Constructors --- *)
...@@ -473,19 +466,20 @@ let field (m: map) (r: node) (fd: fieldinfo) : node = ...@@ -473,19 +466,20 @@ let field (m: map) (r: node) (fd: fieldinfo) : node =
move m r p s move m r p s
else r else r
let footprint (m: map) (r: node) : SNode.t = let footprint (m: map) (r: node) : node list =
SNode.update_map m ;
try try
let leafs = ref SNode.empty in let visited = ref SNode.empty (* set of visited&normalized nodes *) in
let rec store_leafs (r: node) : unit = let leafs = ref [] (* lsit of leafs *) in
let rg = (* raises Not_found *) Ufind.get m.store r in let rec visit (r: node) : unit =
match rg.clayout with let n = node m r in (* normalized node *)
| Blob | Cell (_,_) -> leafs := SNode.add r !leafs if SNode.mem n !visited then () else
| Compound (_, _, range) -> let _ = visited := SNode.add n !visited in
Ranges.iter store_leafs range let rg = (* raises Not_found *) Ufind.get m.store n in
in store_leafs r ; match rg.clayout with
!leafs | Compound (_, _, range) -> Ranges.iter visit range
with Not_found -> SNode.empty | Blob | Cell (_,_) -> leafs := n :: !leafs
in visit r ; !leafs
with Not_found -> []
let index (m : map) (r: node) (ty:typ) : node = let index (m : map) (r: node) (ty:typ) : node =
move m r 0 (Cil.bitsSizeOf ty) move m r 0 (Cil.bitsSizeOf ty)
......
...@@ -109,12 +109,7 @@ val ranges : map -> node -> range list ...@@ -109,12 +109,7 @@ val ranges : map -> node -> range list
val points_to : map -> node -> node option val points_to : map -> node -> node option
val pointed_by : map -> node -> node list val pointed_by : map -> node -> node list
module SNode : sig val footprint : map -> node -> node list
val update_map : map -> unit
include Set.S with type elt = node
end
val footprint : map -> node -> SNode.t
val included : map -> node -> node -> bool val included : map -> node -> node -> bool
val separated : map -> node -> node -> bool val separated : map -> node -> node -> bool
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment