diff --git a/src/plugins/alias/src/API.ml b/src/plugins/alias/src/API.ml index 50566cb6ac6060e6085cff52f4f9152036c58f20..001e0444ac93ca61392adf233fab963ce4749a2c 100644 --- a/src/plugins/alias/src/API.ml +++ b/src/plugins/alias/src/API.ml @@ -58,7 +58,6 @@ module Statement = struct let alias_sets_lvals ~stmt = get_list ~stmt Abstract_state.alias_sets_lvals let alias_vars ~stmt lv = vars ~stmt (Abstract_state.alias_vars lv) let alias_lvals ~stmt lv = lset ~stmt (Abstract_state.alias_lvals lv) - let aliases = alias_lvals (* deprecated *) let new_aliases_lvals ~stmt lv = let get_set state = @@ -76,13 +75,9 @@ module Statement = struct let are_aliased ~stmt (lv1: lval) (lv2:lval) : bool = (* TODO: more efficient algorithm: do they share a successor? *) - LSet.mem lv2 @@ aliases ~stmt lv1 + LSet.mem lv2 @@ alias_lvals ~stmt lv1 end -let points_to_set_stmt _kf stmt = Statement.points_to_lvals ~stmt - -let aliases_stmt _kf stmt = Statement.aliases ~stmt - module Function = struct let return_stmt kf = if Kernel_function.has_definition kf @@ -95,7 +90,6 @@ module Function = struct let alias_sets_lvals ~kf = Statement.alias_sets_lvals ~stmt:(return_stmt kf) let alias_vars ~kf = Statement.alias_vars ~stmt:(return_stmt kf) let alias_lvals ~kf = Statement.alias_lvals ~stmt:(return_stmt kf) - let aliases = alias_lvals (* deprecated *) let are_aliased ~kf = Statement.are_aliased ~stmt:(return_stmt kf) let fundec_stmts ~kf lv = @@ -108,37 +102,13 @@ module Function = struct Options.abort "fundec_stmts: function %a has no definition" Kernel_function.pretty kf end -let points_to_set_kf kf = Function.points_to_lvals ~kf - -let aliases_kf kf = Function.aliases ~kf - -let fundec_stmts kf = Function.fundec_stmts ~kf - - -let fold_points_to_set f_fold acc kf s lv = - LSet.fold (fun e a -> f_fold a e) (points_to_set_stmt kf s lv) acc - -let fold_aliases_stmt f_fold acc kf s lv = - LSet.fold (fun e a -> f_fold a e) (aliases_stmt kf s lv) acc - -let fold_new_aliases_stmt f_fold acc _kf s lv = - LSet.fold (fun e a -> f_fold a e) (Statement.new_aliases_lvals ~stmt:s lv) acc - -let fold_points_to_set_kf (f_fold: 'a -> lval -> 'a) (acc: 'a) (kf:kernel_function) (lv:lval) : 'a = - LSet.fold (fun e a -> f_fold a e) (points_to_set_kf kf lv) acc - -let fold_aliases_kf (f_fold : 'a -> lval -> 'a) (acc : 'a) kf lv : 'a = - LSet.fold (fun e a -> f_fold a e) (aliases_kf kf lv) acc - let fold_fundec_stmts (f_fold: 'a -> stmt -> lval -> 'a) (acc: 'a) (kf:kernel_function) (lv:lval) : 'a = List.fold_left (fun acc (s, set) -> LSet.fold (fun lv a -> f_fold a s lv) set acc ) acc - (fundec_stmts kf lv) - -let are_aliased (_kf: kernel_function) stmt = Statement.are_aliased ~stmt + (Function.fundec_stmts ~kf lv) let fold_vertex (f_fold : 'a -> G.V.t -> lval -> 'a) (acc: 'a) (_kf: kernel_function) (s:stmt) (lv: lval) : 'a = check_computed (); diff --git a/src/plugins/alias/src/API.mli b/src/plugins/alias/src/API.mli index 067d307cabf82087e41ade6f8460592c83f8256a..bfc144e85a620db57f4fb75aead957dd51e1d66d 100644 --- a/src/plugins/alias/src/API.mli +++ b/src/plugins/alias/src/API.mli @@ -61,9 +61,6 @@ module Statement : sig (** see [Abstract_state.alias_vars] *) val alias_vars : stmt:stmt -> lval -> VarSet.t - val aliases : stmt:stmt -> lval -> LSet.t - [@@alert deprecated "Use Statement.alias_lvals instead!"] - (** see [Abstract_state.alias_lvals] *) val alias_lvals : stmt:stmt -> lval -> LSet.t @@ -94,9 +91,6 @@ module Function : sig (** see [Abstract_state.alias_vars] *) val alias_vars : kf:kernel_function -> lval -> VarSet.t - val aliases : kf:kernel_function -> lval -> LSet.t - [@@alert deprecated "Use Function.alias_lvals instead!"] - (** see [Abstract_state.alias_lvals] *) val alias_lvals : kf:kernel_function -> lval -> LSet.t @@ -107,43 +101,6 @@ module Function : sig val fundec_stmts : kf:kernel_function -> lval -> (stmt * LSet.t) list end -val points_to_set_stmt : kernel_function -> stmt -> lval -> LSet.t -[@@alert deprecated "Use Statement.points_to_vars or Statement.points_to_lvals instead!"] - -val points_to_set_kf : kernel_function -> lval -> LSet.t -[@@alert deprecated "Use Function.points_to_vars or Function.points_to_lvals instead!"] - -val aliases_stmt : kernel_function -> stmt -> lval -> LSet.t -[@@alert deprecated "Use Statement.aliases instead!"] - -val aliases_kf : kernel_function -> lval -> LSet.t -[@@alert deprecated "Use Function.aliases instead!"] - -val fundec_stmts : kernel_function -> lval -> (stmt * LSet.t) list -[@@alert deprecated "Use Function.fundec_stmts instead!"] - - -val fold_points_to_set: - ('a -> lval -> 'a) -> 'a -> kernel_function -> stmt -> lval -> 'a -[@@alert deprecated "Use LSet.fold/Statement.points_to_lvals or VarSet.fold/Statement.points_to_vars instead!"] - -val fold_aliases_stmt: - ('a -> lval -> 'a) -> 'a -> kernel_function -> stmt -> lval -> 'a -[@@alert deprecated "Use LSet.fold and Statement.aliases instead!"] - -val fold_new_aliases_stmt: - ('a -> lval -> 'a) -> 'a -> kernel_function -> stmt -> lval -> 'a -[@@alert deprecated "Use Statement.new_aliases with LSet.fold instead!"] - -val fold_points_to_set_kf : - ('a -> lval -> 'a) -> 'a -> kernel_function -> lval -> 'a -[@@alert deprecated "Use LSet.fold/Function.points_to_lvals VarSet.fold/Function.points_to_vars instead!"] - -(** [fold_aliases_kf f acc kf lv] folds [f acc] over all the aliases of lval - [lv] at the end of function [kf]. *) -val fold_aliases_kf: - ('a -> lval -> 'a) -> 'a -> kernel_function -> lval -> 'a -[@@alert deprecated "Use LSet.fold/Function.aliases VarSet.fold/alias_vars instead!"] (** [fold_fundec_stmts f acc kf v] folds [f acc s e] on the list of pairs [s, e] where [e] is the set of lval aliased to [v] after statement [s] @@ -151,9 +108,6 @@ val fold_aliases_kf: val fold_fundec_stmts: ('a -> stmt -> lval -> 'a) -> 'a -> kernel_function -> lval -> 'a -val are_aliased: kernel_function -> stmt -> lval -> lval -> bool -[@@alert deprecated "Use Statement.are_aliased instead!"] - (** [fold_vertex f acc kf s v] folds [f acc i lv] to all [lv] in [i], where [i] is the vertex that represents the equivalence class of [v] before statement [s] in function [kf]. *) val fold_vertex: @@ -179,14 +133,14 @@ module Abstract_state : sig val get_vars : v -> t -> VarSet.t (** set of lvals which can be used to refered to the given vertex - Example graph: {a} → {b} -t→ {c} - The lvals corresponding to the rightmost vertex are {c, b.t, a->t}: + Example graph: <a> → <b> -t→ <c> + The lvals corresponding to the rightmost vertex are <c, b.t, a->t>: - c: simply refers to a variable associated with the vertex. - b.t: starting from the second vertex one can follow a field-edge - labelled "t" to come upon the rightmost vertex. + labelled [t] to come upon the rightmost vertex. - a->t: Following a pointer edge from the leftmost vertex one obtains - "*a". Following the "t" field-edge one arrives at the rightmost - vertex, corresponding to "( *a ).t" or "a->t". *) + [*a]. Following the [t] field-edge one arrives at the rightmost + vertex, corresponding to [( *a ).t] or [a->t]. *) val get_lval_set : v -> t -> LSet.t (** pretty printer; debug=true prints the graph, debug = false only @@ -209,9 +163,9 @@ module Abstract_state : sig (** Note: You probably want to use [alias_lvals] instead of this function. Combining [find_vertex] with [get_lval_set], this function yields all the different ways the vertex containing the given lval can be referred to. - Example: {a} → {b,c} - If "a" points to "b", then the vertex containing "b" can be referred to not - only by "b" but also by "c" or "*a". + Example: <a> → <b,c> + If [a] points to [b], then the vertex containing [b] can be referred to not + only by [b] but also by [c] or [*a]. Does not raise an exception but returns an empty set if the lval is not in the graph. *) val find_synonyms : lval -> t -> LSet.t @@ -221,31 +175,25 @@ module Abstract_state : sig - variables from a neighbouring vertex, i.e. a vertex that shares a successor with the vertex of [lv]. - Example: {a,b} → {c} ↠{d} ↠{e} - The aliases of "a" are {a,b,d}: - - "b" shares a vertex with "a" - - "d" is in a neighbouring vertex, pointing to "c" as does {a,b} *) + Example: <a,b> → <c> ↠<d> ↠<e> + The aliases of [a] are <a,b,d>: + - [b] shares a vertex with [a] + - [d] is in a neighbouring vertex, pointing to [c] as does <a,b> *) val alias_vars : lval -> t -> VarSet.t - val find_aliases : lval -> t -> LSet.t - [@@alert deprecated "Use find_synonyms, alias_vars, or alias_lvals instead!"] - (** Yields all lvals that are an alias of a given lval [lv]. This includes: - variables sharing an equivalence class (or: vertex) with [lv] - variables from a neighbouring vertex, i.e. a vertex that shares a successor with the vertex of [lv]. - lvals reconstructed from the variables from the two previous sets. - Example: {a,b} → {c} ↠{d} ↠{e} - The aliases of "a" are {a,b,d,*e}: - - "b" shares a vertex with "a" - - "d" is in a neighbouring vertex, as it shares a successor with {a,b} - - *e is obtained by following backwards the pointer edge from {d} to {e}. *) + Example: <a,b> → <c> ↠<d> ↠<e> + The aliases of [a] are <a,b,d,*e>: + - [b] shares a vertex with [a] + - [d] is in a neighbouring vertex, as it shares a successor with <a,b> + - [*e] is obtained by following backwards the pointer edge from <d> to <e>. *) val alias_lvals : lval -> t -> LSet.t - val find_all_aliases : lval -> t -> LSet.t - [@@alert deprecated "Use alias_lvals instead!"] - (** the set of all variables to which the given variable may point. *) val points_to_vars : lval -> t -> VarSet.t @@ -254,18 +202,15 @@ module Abstract_state : sig For some pointer p it will always include *p. *) val points_to_lvals : lval -> t -> LSet.t - val points_to_set : lval -> t -> LSet.t - [@@alert deprecated "Use points_to_vars or points_to_lvals instead!"] - (** all the alias sets of a given state - Example: {a,b} → {c} ↠{d} ↠{e,f} - The aliases sets are {{a,b,d}, {e,f}} + Example: <a,b> → <c> ↠<d> ↠<e,f> + The aliases sets are <<a,b,d>, <e,f>> *) val alias_sets_vars : t -> VarSet.t list (** all the alias sets of a given state, including reconstructed lvals - Example: {a,b} → {c} ↠{d} ↠{e,f} - The aliases sets are {{a,b,d,*e,*f}, {e,f}} + Example: <a,b> → <c> ↠<d> ↠<e,f> + The aliases sets are <<a,b,d,*e,*f>, <e,f>> *) val alias_sets_lvals : t -> LSet.t list diff --git a/src/plugins/alias/src/abstract_state.ml b/src/plugins/alias/src/abstract_state.ml index eaf5dc117778dbb89450885ee9fe0ac2964d2648..9e35a352c70e3989ddc33915055fb69e254cf950 100644 --- a/src/plugins/alias/src/abstract_state.ml +++ b/src/plugins/alias/src/abstract_state.ml @@ -936,12 +936,9 @@ module API = struct let get_lval_set = Readout.get_lval_set let find_vars = Readout.find_vars let find_synonyms = Readout.find_synonyms - let find_aliases = Readout.find_synonyms let alias_vars = Readout.alias_vars let alias_lvals = Readout.alias_lvals - let find_all_aliases = Readout.alias_lvals (* deprecated *) let points_to_vars = Readout.points_to_vars - let points_to_set = Readout.points_to_lvals let points_to_lvals = Readout.points_to_lvals let alias_sets_vars = Readout.alias_sets_vars let alias_sets_lvals = Readout.alias_sets_lvals diff --git a/src/plugins/alias/src/abstract_state.mli b/src/plugins/alias/src/abstract_state.mli index d590d800b4fc4a457cb8c97ffe6d7ca39c0889b7..1d95ead99df5b1449081e87b72bdce224bb1e877 100644 --- a/src/plugins/alias/src/abstract_state.mli +++ b/src/plugins/alias/src/abstract_state.mli @@ -54,23 +54,14 @@ val find_vertex : lval -> t -> v val find_vars : lval -> t -> VarSet.t val find_synonyms : lval -> t -> LSet.t -val find_aliases : lval -> t -> LSet.t -[@@alert deprecated "Use find_synonyms or alias_lvals instead!"] - val alias_vars : lval -> t -> VarSet.t val alias_lvals : lval -> t -> LSet.t -val find_all_aliases : lval -> t -> LSet.t -[@@alert deprecated "Use alias_lvals instead!"] - val points_to_vars : lval -> t -> VarSet.t val points_to_lvals : lval -> t -> LSet.t val alias_sets_vars : t -> VarSet.t list val alias_sets_lvals : t -> LSet.t list -val points_to_set : lval -> t -> LSet.t -[@@alert deprecated "Use points_to_vars or points_to_lvals instead!"] - val find_transitive_closure : lval -> t -> (v * LSet.t) list val is_included : t -> t -> bool