PIPS
transformer.h
Go to the documentation of this file.
1 /* Warning! Do not modify this file that is automatically generated! */
2 /* Modify src/Libs/transformer/transformer-local.h instead, to add your own modifications. */
3 
4 /* header file built by cproto */
5 
6 #ifndef transformer_header_included
7 #define transformer_header_included
8 /* transformer-local.h */
9 /*
10 
11  $Id: transformer-local.h 23065 2016-03-02 09:05:50Z coelho $
12 
13  Copyright 1989-2016 MINES ParisTech
14 
15  This file is part of PIPS.
16 
17  PIPS is free software: you can redistribute it and/or modify it
18  under the terms of the GNU General Public License as published by
19  the Free Software Foundation, either version 3 of the License, or
20  any later version.
21 
22  PIPS is distributed in the hope that it will be useful, but WITHOUT ANY
23  WARRANTY; without even the implied warranty of MERCHANTABILITY or
24  FITNESS FOR A PARTICULAR PURPOSE.
25 
26  See the GNU General Public License for more details.
27 
28  You should have received a copy of the GNU General Public License
29  along with PIPS. If not, see <http://www.gnu.org/licenses/>.
30 
31 */
32  /* include file for transformer library
33  */
34 
35 /* prefix used for value entity names; no conflict should occur with user
36  * function names as long as they are restricted to 6 characters
37  */
38 #define SEMANTICS_MODULE_NAME "*SEMANTICS*"
39 
40 /* Must be used in suffixes and prefixes below */
41 #define SEMANTICS_SEPARATOR '#'
42 
43 /* internal entity names (FI: I should have used suffixes to be consistent with external
44  * suffixes */
45 #define OLD_VALUE_PREFIX "o#"
46 #define INTERMEDIATE_VALUE_PREFIX "i#"
47 #define TEMPORARY_VALUE_PREFIX "t#"
48 
49 /* external suffixes (NEW_VALUE_SUFFIX is not used, new values are represented
50  * by the variable itself, i.e. new value suffix is the empty string "")
51  */
52 #define NEW_VALUE_SUFFIX "#new"
53 #define OLD_VALUE_SUFFIX "#init"
54 #define INTERMEDIATE_VALUE_SUFFIX "#int"
55 
56 #define ADDRESS_OF_SUFFIX "#addressof"
57 
58 #define SIZEOF_SUFFIX "#sizeof"
59 /* cproto-generated files */
60 /* basic.c */
61 extern transformer transformer_dup(transformer /*t_in*/);
62 extern void transformer_free(transformer /*t*/);
63 extern void free_transformers(transformer /*t*/, ...);
64 extern void old_transformer_free(transformer /*t*/);
66 extern transformer transformer_empty(void);
68 extern bool transformer_identity_p(transformer /*t*/);
69 extern bool transformer_is_empty_p(transformer /*t*/);
70 extern bool transformer_is_rn_p(transformer /*t*/);
71 extern transformer transformer_add_sign_information(transformer /*tf*/, entity /*v*/, int /*v_sign*/);
76 extern transformer transformer_constraint_add(transformer /*tf*/, Pvecteur /*i*/, bool /*equality*/);
82 extern transformer transformer_add_equality(transformer /*tf*/, entity /*v1*/, entity /*v2*/);
83 extern transformer transformer_add_equality_with_integer_constant(transformer /*tf*/, entity /*v*/, long long int /*cst*/);
84 extern transformer transformer_add_inequality(transformer /*tf*/, entity /*v1*/, entity /*v2*/, bool /*strict_p*/);
85 extern transformer transformer_add_inequality_with_integer_constraint(transformer /*tf*/, entity /*v*/, long long int /*cst*/, bool /*less_than_p*/);
86 extern transformer transformer_add_inequality_with_affine_term(transformer /*tf*/, entity /*v*/, entity /*x*/, int /*a*/, int /*cst*/, bool /*less_than_p*/);
87 extern transformer transformer_add_equality_with_affine_term(transformer /*tf*/, entity /*v*/, entity /*x*/, int /*a*/, int /*cst*/);
88 extern transformer transformer_add_inequality_with_linear_term(transformer /*tf*/, entity /*v*/, entity /*x*/, int /*a*/, bool /*less_than_p*/);
89 extern transformer transformer_add_3d_affine_constraint(transformer /*tf*/, int /*a1*/, entity /*v1*/, int /*a2*/, entity /*v2*/, int /*a3*/, entity /*v3*/, int /*cst*/, bool /*equation_p*/);
92 extern bool transformer_argument_general_consistency_p(transformer /*t*/, bool /*is_weak*/);
93 extern bool transformer_consistency_p(transformer /*t*/);
94 extern bool transformers_consistency_p(list /*tl*/);
96 extern bool transformer_general_consistency_p(transformer /*tf*/, bool /*is_weak*/);
99 extern bool value_belongs_to_transformer_space(entity /*v*/, transformer /*tf*/);
100 extern void add_value_to_transformer_space(entity /*v*/, transformer /*tf*/);
104 extern transformer move_transformer(transformer /*t1*/, transformer /*t2*/);
105 extern bool transformer_equations_constrain_variable_p(const transformer /*t*/, const entity /*v*/);
106 extern bool transformer_inequalities_constrain_variable_p(const transformer /*t*/, const entity /*v*/);
107 /* convex_hull.c */
109 /* fix_point.c */
113 extern void build_transfer_equations(Pcontrainte /*leq*/, Pcontrainte */*plteq*/, Pbase */*pb_new*/);
114 extern bool transfer_equation_p(Pvecteur /*eq*/);
116 extern bool sub_basis_p(Pbase /*b1*/, Pbase /*b2*/);
117 extern void equations_to_bases(Pcontrainte /*lteq*/, Pbase */*pb_new*/, Pbase */*pb_old*/);
124 extern bool invariant_vector_p(Pvecteur /*v*/);
125 extern Psysteme sc_multiply_constant_terms(Psysteme /*sc*/, Variable /*ik*/, bool /*star_p*/);
129 extern transformer any_transformer_to_k_closure(transformer /*t_init*/, transformer /*t_enter*/, transformer /*t_next*/, transformer /*t_body*/, transformer /*post_init*/, int /*k*/, bool /*assume_previous_iteration_p*/);
130 /* io.c */
133 extern list print_transformers(list /*tl*/);
134 extern transformer fprint_transformer(FILE */*fd*/, transformer /*tf*/, get_variable_name_t /*value_name*/);
135 extern list fprint_transformers(FILE */*fd*/, list /*tl*/, get_variable_name_t /*value_name*/);
136 extern char *dump_value_name(entity /*e*/);
137 extern void dump_transformer(transformer /*tf*/);
138 /* transformer.c */
139 extern transformer simple_equality_to_transformer(entity /*e*/, entity /*f*/, bool /*assignment*/);
141 extern transformer generic_equality_to_transformer(entity /*e*/, entity /*f*/, bool /*assignment*/, bool /*unary_minus_p*/);
142 extern transformer simple_addition_to_transformer(entity /*e*/, entity /*e1*/, entity /*e2*/, bool /*addition_p*/);
143 extern transformer relation_to_transformer(entity /*op*/, entity /*e1*/, entity /*e2*/, bool /*veracity*/);
144 extern transformer transformer_combine(volatile transformer /*t1*/, transformer /*t2*/);
145 extern list transformers_combine(list /*tl1*/, transformer /*t2*/);
146 extern list one_to_one_transformers_combine(list /*tl1*/, list /*tl2*/);
156 extern list transformers_range(list /*tfl*/);
161 extern transformer transformer_normalize(transformer /*t*/, int /*level*/);
162 extern transformer transformer_safe_normalize(transformer /*t*/, int /*level*/);
163 extern list transformers_safe_normalize(list /*tl*/, int /*level*/);
168 extern transformer transformer_projection(transformer /*t*/, list /*args*/);
170 extern Psysteme no_elim(Psysteme /*ps*/);
173 extern transformer transformer_projection_with_redundancy_elimination_and_check(volatile transformer /*t*/, list /*args*/, Psysteme (* /*elim*/)(Psysteme), bool /*check_consistency_p*/);
174 extern transformer transformer_apply(transformer /*tf*/, transformer /*pre*/);
175 extern list transformer_apply_generic(list /*tl*/, transformer /*pre*/, bool /*keep_p*/);
176 extern list transformer_apply_map(list /*tl*/, transformer /*pre*/);
177 extern list transformers_apply(list /*tl*/, transformer /*pre*/);
178 extern list transformers_apply_and_keep_all(list /*tl*/, transformer /*pre*/);
180 extern list transformers_safe_apply(list /*tl*/, transformer /*pre*/);
183 extern transformer transformer_filter(transformer /*t*/, list /*args*/);
185 extern bool transformer_affect_linear_p(transformer /*tf*/, Pvecteur /*l*/);
186 extern bool transformer_affect_transformer_p(transformer /*tf1*/, transformer /*tf2*/);
188 extern transformer args_to_transformer(list /*le*/);
191 extern bool transformer_value_substitutable_p(transformer /*t*/, entity /*e1*/, entity /*e2*/);
193 extern Pvecteur simplify_float_constraint(Pvecteur /*v*/, bool /*is_equation_p*/);
195 extern bool transformer_empty_p(transformer /*t*/);
196 extern bool transformer_strongly_empty_p(transformer /*t*/);
197 extern bool transformer_to_1D_lattice(entity /*v*/, transformer /*pre*/, Value */*gcd_p*/, Value */*c_p*/);
199 extern bool same_dimension_p(entity /*actual_array*/, entity /*dummy_array*/, list /*l_actual_ref*/, size_t /*i*/, transformer /*context*/);
204 extern list transformer_to_local_values(transformer /*tf*/, list /*dl*/);
205 /* value.c */
206 extern bool hash_entity_to_values_undefined_p(void);
207 extern void reset_value_counters(void);
208 extern void reset_temporary_value_counter(void);
209 extern int number_of_temporary_values(void);
210 extern void set_analyzed_types(void);
211 extern void reset_analyzed_types(void);
212 extern bool integer_analyzed_p(void);
213 extern bool boolean_analyzed_p(void);
214 extern bool string_analyzed_p(void);
215 extern bool float_analyzed_p(void);
216 extern bool complex_analyzed_p(void);
217 extern bool pointer_analyzed_p(void);
218 extern bool constant_path_analyzed_p(void);
219 extern bool analyzed_basic_p(basic /*b*/);
220 extern bool analyzed_type_p(type /*t*/);
221 extern bool analyzed_struct_p(entity /*s*/);
222 extern bool analyzed_struct_type_p(type /*st*/);
223 extern bool analyzed_array_p(entity /*a*/);
224 extern bool analyzed_array_type_p(type /*at*/);
225 extern bool analyzed_entity_p(entity /*e*/);
226 extern bool analyzable_scalar_entity_p(entity /*e*/);
227 extern bool analyzed_constant_p(entity /*f*/);
228 extern bool analyzed_reference_p(reference /*r*/);
232 extern bool local_old_value_entity_p(entity /*e*/);
233 extern bool local_intermediate_value_entity_p(entity /*e*/);
234 extern bool local_temporary_value_entity_p(entity /*e*/);
235 extern bool global_new_value_p(entity /*e*/);
236 extern bool global_old_value_p(entity /*e*/);
237 extern bool global_intermediate_value_p(entity /*e*/);
239 extern const char *global_value_name_to_user_name(const char */*gn*/);
240 extern const char *external_value_name(entity /*e*/);
241 extern const char *pips_user_value_name(entity /*e*/);
242 extern entity entity_to_new_value(entity /*e*/);
243 extern entity entity_to_old_value(entity /*e*/);
246 extern entity type_to_sizeof_value(type /*t*/);
247 extern bool entity_has_values_p(entity /*e*/);
248 extern bool new_value_entity_p(entity /*e*/);
249 extern bool old_value_entity_p(entity /*e*/);
250 extern bool intermediate_value_entity_p(entity /*e*/);
251 extern bool address_of_value_entity_p(entity /*e*/);
252 extern bool sizeof_value_entity_p(entity /*e*/);
253 extern bool value_entity_p(entity /*e*/);
254 extern void print_value_mappings(void);
256 extern void test_mapping_entry_consistency(void);
257 extern int number_of_analyzed_values(void);
259 extern int number_of_analyzed_variables(void);
260 extern void allocate_value_mappings(int /*n*/, int /*o*/, int /*i*/);
261 extern bool hash_value_to_name_undefined_p(void);
262 extern void error_reset_value_mappings(void);
263 extern void free_value_mappings(void);
264 extern void error_free_value_mappings(void);
266 extern void add_address_of_value(reference /*r*/, type /*t*/);
267 extern void add_sizeof_value(type /*t*/);
268 extern void add_new_value(entity /*e*/);
269 extern void add_new_alias_value(entity /*e*/, entity /*a*/);
272 extern void add_old_value(entity /*e*/);
273 extern void add_old_alias_value(entity /*e*/, entity /*a*/);
274 extern void add_intermediate_value(entity /*e*/);
275 extern void add_intermediate_alias_value(entity /*e*/, entity /*a*/);
276 extern void add_local_old_value(entity /*e*/);
277 extern void add_local_intermediate_value(entity /*e*/);
278 extern void remove_entity_values(entity /*e*/, bool /*readonly*/);
279 extern void add_synonym_values(entity /*e*/, entity /*eq*/, bool /*readonly*/);
280 extern entity value_to_variable(entity /*val*/);
281 extern entity old_value_to_new_value(entity /*o_val*/);
282 extern entity new_value_to_old_value(entity /*n_val*/);
283 extern entity value_alias(entity /*e*/);
285 extern string value_full_name(entity /*v*/);
286 extern const char *readable_value_name(entity /*v*/);
287 /* prettyprint.c */
288 extern string transformer_to_string(transformer /*tf*/);
289 extern string precondition_to_string(transformer /*pre*/);
290 extern string arguments_to_string(string /*s*/, list /*args*/);
291 extern string relation_to_string(string /*s*/, Psysteme /*ps*/, char *(* /*variable_name*/)(entity));
292 extern const char *generic_value_name(entity /*e*/);
293 /* transformer_list.c */
294 extern list merge_transformer_lists(list /*tl1*/, list /*tl2*/);
295 extern bool check_transformer_list(list /*tl*/);
296 extern list combine_transformer_lists(list /*tl1*/, list /*tl2*/);
297 extern list apply_transformer_lists_generic(list /*tl1*/, list /*tl2*/, bool /*exclude_p*/);
298 extern list apply_transformer_lists(list /*tl1*/, list /*tl2*/);
299 extern list apply_transformer_lists_with_exclusion(list /*tl1*/, list /*tl2*/);
300 extern list clean_up_transformer_list(list /*tfl*/);
302 extern transformer generic_transformer_list_to_transformer(list /*ltl*/, bool /*active_p*/);
308 extern list transformer_list_to_argument(list /*tl*/);
309 extern list transformer_list_with_effect(list /*tl*/, entity /*v*/);
310 extern list transformer_list_preserved_variables(list /*vl*/, list /*tl*/, list /*tl_v*/);
313 extern transformer transformer_list_generic_transitive_closure(list /*tfl*/, bool /*star_p*/);
316 #endif /* transformer_header_included */
int Value
struct _newgen_struct_transformer_ * transformer
Definition: ri.h:431
le type des coefficients dans les vecteurs: Value est defini dans le package arithmetique
Definition: vecteur-local.h:89
The structure used to build lists in NewGen.
Definition: newgen_list.h:41
void error_free_value_mappings(void)
To be called by an error handler.
Definition: value.c:1222
bool value_belongs_to_transformer_space(entity, transformer)
Definition: basic.c:842
transformer args_to_transformer(list)
Generates a transformer abstracting a totally unknown modification of the values associated to variab...
Definition: transformer.c:1907
entity make_local_temporary_value_entity(type)
Definition: value.c:605
Pcontrainte constraints_keep_invariants_only(Pcontrainte)
Definition: fix_point.c:910
bool global_intermediate_value_p(entity)
Definition: value.c:703
list transformer_to_potential_stub_translation(transformer, entity)
void free_transformers(transformer,...)
Definition: basic.c:73
transformer transformer_intersect_range_with_domain(transformer)
When tf is used repeatedly in a loop, the range is part of the domain from iteration 2 to the end.
Definition: transformer.c:845
void add_sizeof_value(type)
For a given architecture, sizeof(t) is a constant.
Definition: value.c:1352
transformer transformer_equality_fix_point(transformer)
Let A be the affine loop transfert function.
Definition: fix_point.c:266
bool transformer_with_temporary_values_p(transformer)
Does transformer tf use temporary values?
Definition: transformer.c:1131
transformer transformer_arguments_projection(transformer)
transformer transformer_projection(transformer t); projection of t along the hyperplane defined by va...
Definition: transformer.c:1285
const char * generic_value_name(entity)
Definition: prettyprint.c:81
bool pointer_analyzed_p(void)
Definition: value.c:325
string precondition_to_string(transformer)
Definition: prettyprint.c:58
bool integer_analyzed_p(void)
Definition: value.c:300
bool check_transformer_list(list)
What do we want to impose?
void add_synonym_values(entity, entity, bool)
Definition: value.c:1578
transformer transformer_inequality_add(transformer, Pvecteur)
Definition: basic.c:375
bool analyzed_reference_p(reference)
FI: Nelson explains the motivation for can_be_constant_path_p() but I do not understand them.
Definition: value.c:518
transformer transformer_inequalities_add(transformer, Pcontrainte)
Warning:
Definition: basic.c:409
bool analyzed_entity_p(entity)
Definition: value.c:457
Pvecteur simplify_float_constraint(Pvecteur, bool)
If v is a not a float constraint, retun v.
Definition: transformer.c:2061
const char * external_value_name(entity)
Definition: value.c:753
bool transformer_weak_consistency_p(transformer)
Interprocedural transformers do not meet all conditions.
Definition: basic.c:626
bool transformer_affect_transformer_p(transformer, transformer)
Transformer tf1 affects transformer tf2 if values modified by tf1 appear in any constraint of tf2.
Definition: transformer.c:1870
bool transformer_safe_affect_transformer_p(transformer, transformer)
Definition: transformer.c:1894
transformer transformer_add_3d_affine_constraint(transformer, int, entity, int, entity, int, entity, int, bool)
Add the constraint a1 v1 + a2 v2 + a3 v3 + cst <= or == 0.
Definition: basic.c:536
list transformers_combine(list, transformer)
Combine each transformer of transformer list tl1 with t2.
Definition: transformer.c:454
void reset_value_counters(void)
Definition: value.c:244
list transformer_apply_map(list, transformer)
Generates a new list of postconditions, one for each transformer in tl, unless the postcondition is e...
Definition: transformer.c:1610
Pcontrainte constraints_eliminate_constant_terms(Pcontrainte, Pvecteur)
Definition: fix_point.c:865
transformer transformer_list_generic_transitive_closure(list, bool)
Computation of an upper approximation of a transitive closure using constraints on the discrete deriv...
transformer transformer_projection_with_redundancy_elimination(transformer, list, Psysteme(*)(Psysteme))
It is not clear if this function projects values or variables.
Definition: transformer.c:1322
transformer transformer_list_closure_to_precondition(list, transformer, transformer)
Relay to select a heuristic.
int number_of_temporary_values(void)
Definition: value.c:255
entity global_new_value_to_global_old_value(entity)
Definition: value.c:716
list transformers_apply(list, transformer)
Same as previous one, but with a more normalized name.
Definition: transformer.c:1616
transformer transformer_add_inequality_with_integer_constraint(transformer, entity, long long int, bool)
Add the inequality v <= cst or v >= cst.
Definition: basic.c:477
transformer transformer_add_variable_update(transformer, entity)
Add an update of variable v into t.
Definition: basic.c:289
bool sub_basis_p(Pbase, Pbase)
FI: should be moved in base.c.
Definition: fix_point.c:648
void set_analyzed_types(void)
Definition: value.c:271
transformer transformer_identity(void)
Allocate an identity transformer.
Definition: basic.c:110
transformer print_any_transformer(transformer)
For debugging without problem from temporary values.
Definition: io.c:56
transformer transformer_add_inequality(transformer, entity, entity, bool)
Add the equality v1 <= v2 or v1 < v2.
Definition: basic.c:464
transformer transformer_list_multiple_closure_to_precondition(list, transformer, transformer)
When some variables are not modified by some transformers, use projections on subsets to increase the...
bool local_intermediate_value_entity_p(entity)
Definition: value.c:648
transformer transformer_add_modified_variable_entity(transformer, entity)
FI: like the previous function, but supposed to end up with a consistent transformer.
Definition: basic.c:909
Pvecteur look_for_the_best_counter(Pcontrainte)
Try to identify a loop counter among the equation egs.
Definition: fix_point.c:797
bool analyzed_basic_p(basic)
The basic corresponds to one of the analyzed types.
Definition: value.c:337
transformer transformer_constraint_add(transformer, Pvecteur, bool)
Definition: basic.c:348
void add_intermediate_alias_value(entity, entity)
Definition: value.c:1495
bool transfer_equation_p(Pvecteur)
A transfer equation is an explicit equation giving one new value as a function of old values and a co...
Definition: fix_point.c:552
string value_full_name(entity)
for debugging purposes
Definition: value.c:1762
bool old_value_entity_p(entity)
Definition: value.c:936
Psysteme transformer_derivative_constraints(transformer)
Allocate a new constraint system sc(dx) with dx=x'-x and t(x,x')
transformer transformer_safe_value_substitute(transformer, entity, entity)
Definition: transformer.c:2048
list one_to_one_transformers_combine(list, list)
Combine each transformer of transformer list tl1 with the corresponding transformer in transformer li...
Definition: transformer.c:476
bool value_entity_p(entity)
Definition: value.c:976
bool analyzable_scalar_entity_p(entity)
The entity type is one of the analyzed types.
Definition: value.c:471
transformer transformer_value_substitute(transformer, entity, entity)
transformer transformer_value_substitute(transformer t, entity e1, entity e2): if e2 does not appear ...
Definition: transformer.c:1993
transformer invariant_wrt_transformer(transformer, transformer)
transformer invariant_wrt_transformer(transformer p, transformer tf): Assume that tf is a fix-point o...
Definition: transformer.c:1948
transformer transformer_safe_inverse_apply(transformer, transformer)
Definition: transformer.c:1686
transformer transformer_safe_domain_intersection(transformer, transformer)
If tf and pre are defined, update tf.
Definition: transformer.c:696
transformer transformer_convex_hull(transformer, transformer)
convex_hull.c
Definition: convex_hull.c:216
transformer simple_equality_to_transformer(entity, entity, bool)
transformer.c
Definition: transformer.c:58
transformer transformer_list_transitive_closure(list)
Compute (U tfl)*.
void add_new_value(entity)
Definition: value.c:1386
void add_old_alias_value(entity, entity)
Definition: value.c:1463
bool intermediate_value_entity_p(entity)
Definition: value.c:955
bool boolean_analyzed_p(void)
Definition: value.c:305
bool float_analyzed_p(void)
Definition: value.c:315
bool transformer_argument_consistency_p(transformer)
Definition: basic.c:551
bool transformer_argument_general_consistency_p(transformer, bool)
Definition: basic.c:561
transformer transformer_add_variables_update(transformer, list)
Definition: basic.c:340
transformer transformer_return_value_projection(entity, transformer)
Project return values that are not linked to function f.
Definition: transformer.c:1220
Pvecteur vect_variables_to_values(Pvecteur)
FI: not used, not debugged.
Definition: value.c:1755
entity new_value_in_transfer_equation(Pvecteur)
Definition: fix_point.c:570
transformer transformer_equalities_add(transformer, Pcontrainte)
Definition: basic.c:391
bool analyzed_array_p(entity)
Does array a contain directly or indirectly a field that may be analyzable?
Definition: value.c:434
entity entity_to_intermediate_value(entity)
Definition: value.c:879
void test_mapping_entry_consistency(void)
Definition: value.c:1113
void remove_entity_values(entity, bool)
Definition: value.c:1545
bool transformer_is_empty_p(transformer)
Check that transformer t is the canonical representation of an empty transformer.
Definition: basic.c:172
Psysteme sc_keep_invariants_only(Psysteme)
This function cannot be moved into the Linear library.
Definition: fix_point.c:902
char * dump_value_name(entity)
char * dump_value_name(e): used as functional argument because entity_name is a macro
Definition: io.c:128
entity old_value_to_new_value(entity)
Definition: value.c:1698
transformer transformer_inverse_apply(transformer, transformer)
transformer transformer_inverse_apply(transformer tf, transformer post): apply transformer tf on prec...
Definition: transformer.c:1657
list apply_transformer_lists_generic(list, list, bool)
each transformer of tl1 must be applied to each precondition of tl2, including the identity transform...
transformer simple_unary_minus_to_transformer(entity, entity)
Definition: transformer.c:65
transformer transformer_add_value_update(transformer, entity)
Add an update of variable v to t (a value cannot be updated)
Definition: basic.c:321
entity external_entity_to_new_value(entity)
Definition: value.c:1411
entity value_alias(entity)
Static aliasing.
Definition: value.c:1729
bool transformer_internal_consistency_p(transformer)
Same as above but equivalenced variables should not appear in the argument list or in the predicate b...
Definition: basic.c:790
transformer empty_transformer(transformer)
Do not allocate an empty transformer, but transform an allocated transformer into an empty_transforme...
Definition: basic.c:144
transformer transformer_safe_intersection(transformer, transformer)
Allocate a new transformer.
Definition: transformer.c:639
list transformer_list_to_argument(list)
Returns the list of variables modified by at least one transformer in tl.
transformer generic_equality_to_transformer(entity, entity, bool, bool)
Definition: transformer.c:72
transformer transformer_to_domain(transformer)
Return the domain of relation tf in a newly allocated transformer.
Definition: transformer.c:772
entity new_value_to_old_value(entity)
Definition: value.c:1710
bool global_old_value_p(entity)
Return true if an entity is a global old value (such as "i#init"...).
Definition: value.c:690
bool transformer_is_rn_p(transformer)
Check that transformer t is the canonical representation of the whole afine space defined by its basi...
Definition: basic.c:183
transformer simple_addition_to_transformer(entity, entity, entity, bool)
e and e1 and e2 are assumed to be values.
Definition: transformer.c:106
transformer transformer_add_equality_with_integer_constant(transformer, entity, long long int)
Add an equality between a value and an integer constant: v==cst.
Definition: basic.c:450
void transformer_free(transformer)
Definition: basic.c:68
transformer transformer_add_equality_with_affine_term(transformer, entity, entity, int, int)
Add the equality v = a x + cst.
Definition: basic.c:517
void add_intermediate_value(entity)
Definition: value.c:1476
bool constant_path_analyzed_p(void)
Definition: value.c:330
entity reference_to_address_entity(reference)
The address is the address of a variable or of a reference such as &a[5], not a of a value.
Definition: value.c:1285
transformer(* transformer_fix_point_operator)(transformer)
fix_point.c
Definition: fix_point.c:114
transformer transformer_safe_image_intersection(transformer, transformer)
Allocate a new transformer.
Definition: transformer.c:647
transformer any_transformer_to_k_closure(transformer, transformer, transformer, transformer, transformer, int, bool)
Derived from any_loop_to_k_transformer()
Definition: fix_point.c:1304
bool string_analyzed_p(void)
Definition: value.c:310
transformer transformer_projection(transformer, list)
values in args must be in t's base
Definition: transformer.c:1267
Psysteme simplify_float_constraint_system(Psysteme)
Simplify float constraints and possibly detect.
Definition: transformer.c:2146
transformer transformer_range_intersection(transformer, transformer)
Allocate a new transformer rtf that is tf with its range restricted by the range r.
Definition: transformer.c:830
transformer transformer_list_transitive_closure_plus(list)
Compute (U tfl)+.
transformer transformer_add_sign_information(transformer, entity, int)
CHANGE THIS NAME: no loop index please, it's not directly linked to loops!!!
Definition: basic.c:200
list transformers_apply_and_keep_all(list, transformer)
Same as previous one, but with a more normalized name.
Definition: transformer.c:1622
list transformer_apply_generic(list, transformer, bool)
Generates a new list of postconditions, one for each transformer in tl, unless the postcondition is e...
Definition: transformer.c:1593
void build_transfer_equations(Pcontrainte, Pcontrainte *, Pbase *)
Definition: fix_point.c:433
list transformer_list_with_effect(list, entity)
build a sublist sl of the transformer list tl with transformers that modify the value of variable v
list transformer_to_local_values(transformer, list)
Build a list of values appearing in tf that are linked to a variable in dl.
Definition: transformer.c:2821
bool analyzed_constant_p(entity)
The constant may appear as a variable in the linear systems.
Definition: value.c:487
void old_transformer_free(transformer)
Definition: basic.c:89
transformer transformer_intersection(transformer, transformer)
tf is a new transformer that receives the constraints in t1 and t2.
Definition: transformer.c:600
transformer transformer_empty(void)
Allocate an empty transformer.
Definition: basic.c:120
list transformer_list_safe_variables_projection(list, list)
Returns a new list of newly allocated projected transformers.
bool analyzed_array_type_p(type)
Definition: value.c:446
void add_old_value(entity)
Definition: value.c:1440
entity entity_to_new_value(entity)
Definition: value.c:859
void reset_analyzed_types(void)
Definition: value.c:289
bool transformer_consistency_p(transformer)
FI: I do not know if this procedure should always return or fail when an inconsistency is found.
Definition: basic.c:612
list two_transformers_to_list(transformer, transformer)
Transformer two transformers into a correct transformer list.
transformer transformer_pattern_fix_point(transformer)
This fixpoint function was developped to present a talk at FORMA.
Definition: fix_point.c:709
bool transformer_argument_weak_consistency_p(transformer)
Definition: basic.c:556
bool transformer_identity_p(transformer)
Check that t is an identity function.
Definition: basic.c:154
bool new_value_entity_p(entity)
the following three functions are directly or indirectly relative to the current module and its value...
Definition: value.c:925
list print_transformers(list)
Definition: io.c:62
transformer transformer_projection_without_check(transformer, list, Psysteme(*)(Psysteme))
In some cases, you know the projection will result in a non-consistent transformer that will be fixed...
Definition: transformer.c:1334
entity make_local_temporary_value_entity_with_basic(basic)
Definition: value.c:620
list transformer_to_analyzed_arrays(transformer)
The list of array entities that appear in the basis of the transformer predicate as array element loc...
Definition: transformer.c:2793
const char * pips_user_value_name(entity)
This function is called many times when the constraints and the system of constraints are sorted usin...
Definition: value.c:815
transformer transformer_safe_combine_with_warnings(transformer, transformer)
Transformer tf1 and tf2 are supposed to be independent but they may interfere, for instance because s...
Definition: transformer.c:493
Psysteme sc_eliminate_constant_terms(Psysteme, Pvecteur)
Eliminate all constant terms in sc using v.
Definition: fix_point.c:853
transformer transformer_domain_intersection(transformer, transformer)
Restrict the domain of the relation tf with pre.
Definition: transformer.c:661
transformer generic_transformer_list_to_transformer(list, bool)
Reduce the transformer list with the convex hull operator.
void reset_temporary_value_counter(void)
Definition: value.c:250
int aproximate_number_of_analyzed_variables(void)
Definition: value.c:1153
list transformers_safe_normalize(list, int)
Definition: transformer.c:1119
list transformer_to_analyzed_locations(transformer)
The list of location entities that appear in the basis of the transformer predicate.
Definition: transformer.c:2785
transformer transformer_range(transformer)
Return the range of relation tf in a newly allocated transformer.
Definition: transformer.c:714
bool invariant_vector_p(Pvecteur)
A vector (in fact, a constraint) represents an invariant if it is a sum of delta for each variable.
Definition: fix_point.c:934
void add_local_old_value(entity)
Definition: value.c:1509
void print_value_mappings(void)
Definition: value.c:993
transformer precondition_to_abstract_store(transformer)
Get rid of all old values and arguments.
Definition: basic.c:871
transformer transformer_equality_add(transformer, Pvecteur)
Definition: basic.c:383
bool global_new_value_p(entity)
GLOBAL VALUES.
Definition: value.c:667
transformer transformer_add_inequality_with_linear_term(transformer, entity, entity, int, bool)
Add the inequality v <= a x or v >= a x.
Definition: basic.c:530
bool transformer_inequalities_constrain_variable_p(const transformer, const entity)
Is value v used with a non-zero coefficient by the inequalities of transformer t?
Definition: basic.c:972
entity make_local_temporary_integer_value_entity(void)
Definition: value.c:629
string arguments_to_string(string, list)
Definition: prettyprint.c:65
list transformers_safe_apply(list, transformer)
returns a list of postconditions, one for each transformer in tl
Definition: transformer.c:1638
transformer transformer_safe_domain(transformer)
Definition: transformer.c:815
transformer transformer_safe_range(transformer)
Definition: transformer.c:743
void dump_transformer(transformer)
Definition: io.c:134
bool address_of_value_entity_p(entity)
Definition: value.c:962
transformer transformer_combine(volatile transformer, transformer)
transformer transformer_combine(transformer t1, transformer t2): compute the composition of transform...
Definition: transformer.c:238
list transformers_derivative_fix_point(list)
Definition: fix_point.c:1262
list transformer_list_to_active_transformer_list(list)
void free_value_mappings(void)
Normal call to free the mappings.
Definition: value.c:1212
entity type_to_sizeof_value(type)
Definition: value.c:899
bool entity_has_values_p(entity)
This function could be made more robust by checking the storage of e.
Definition: value.c:911
transformer transformer_projection_with_redundancy_elimination_and_check(volatile transformer, list, Psysteme(*)(Psysteme), bool)
Definition: transformer.c:1343
void add_new_alias_value(entity, entity)
Definition: value.c:1396
list merge_transformer_lists(list, list)
transformer_list.c
transformer relation_to_transformer(entity, entity, entity, bool)
e and f are assumed to be values.
Definition: transformer.c:139
list apply_transformer_lists(list, list)
transformer transformer_safe_normalize(transformer, int)
Definition: transformer.c:1111
bool same_dimension_p(entity, entity, list, size_t, transformer)
This function returns true if the actual array and the dummy array have the same dimension number i,...
Definition: transformer.c:2665
bool local_old_value_entity_p(entity)
Return true if an entity is a local old value (such as "o#0" for a global value "i#init"....
Definition: value.c:642
bool local_temporary_value_entity_p(entity)
Definition: value.c:654
transformer transformer_image_intersection(transformer, transformer)
allocate a new transformer based on transformer t1 and postcondition t2
Definition: transformer.c:608
const char * readable_value_name(entity)
For debugging purposes, we might have to print system with temporary values.
Definition: value.c:1769
bool transformer_to_1D_lattice(entity, transformer, Value *, Value *)
See if the equations in transformer "pre" constraint variable "v" by v = gcd x + c,...
Definition: transformer.c:2480
void add_local_intermediate_value(entity)
Definition: value.c:1526
transformer transformer_list_to_transformer(list)
Reduce the transformer list ltl to one transformer using the convex hull operator.
transformer fprint_transformer(FILE *, transformer, get_variable_name_t)
Definition: io.c:69
transformer transformer_temporary_value_projection(transformer)
Definition: transformer.c:1149
transformer move_transformer(transformer, transformer)
Move arguments and predicate of t2 into t1, free old arguments and predicate of t1,...
Definition: basic.c:939
bool transformer_general_consistency_p(transformer, bool)
Definition: basic.c:632
list transformers_range(list)
Substitute each transformer in list tfl by its range.
Definition: transformer.c:754
bool analyzed_struct_type_p(type)
Definition: value.c:406
transformer transformer_add_identity(transformer, entity)
Definition: basic.c:421
transformer transformer_add_inequality_with_affine_term(transformer, entity, entity, int, int, bool)
Add the inequality v <= a x + cst or v >= a x + cst.
Definition: basic.c:496
entity external_entity_to_old_value(entity)
Definition: value.c:1422
bool complex_analyzed_p(void)
Definition: value.c:320
void allocate_value_mappings(int, int, int)
Definition: value.c:1165
list clean_up_transformer_list(list)
Eliminate empty transformers and keep at most one identity transformer, placed as first list element.
list modified_variables_with_values(void)
Return the list of all analyzed variables which are modified in the current module.
Definition: value.c:1094
bool transformer_strongly_empty_p(transformer)
If true is returned, the transformer certainly is empty.
Definition: transformer.c:2465
void equations_to_bases(Pcontrainte, Pbase *, Pbase *)
Definition: fix_point.c:660
int number_of_analyzed_variables(void)
FI: looks more like the number of values used.
Definition: value.c:1160
bool transformer_affect_linear_p(transformer, Pvecteur)
bool transformer_affect_linear_p(transformer tf, Pvecteur l): returns TRUE if there is a state s such...
Definition: transformer.c:1850
transformer transformer_add_modified_variable(transformer, entity)
FI: this function does not end up with a consistent transformer because the old value is not added to...
Definition: basic.c:889
transformer formal_and_actual_parameters_association(call, transformer)
formal_and_actual_parameters_association(call c, transformer pre): Add equalities between actual and ...
Definition: transformer.c:2542
void error_reset_value_mappings(void)
To be called by error handler only.
Definition: value.c:1205
bool analyzed_struct_p(entity)
Does struct s contain directly or indirectly a field that may be analyzable?
Definition: value.c:387
transformer transformer_normalize(transformer, int)
Eliminate (some) rational or integer redundancy.
Definition: transformer.c:932
entity entity_to_old_value(entity)
Definition: value.c:869
bool hash_entity_to_values_undefined_p(void)
value.c
Definition: value.c:229
transformer transformer_filter(transformer, list)
transformer transformer_filter(transformer t, cons * args): projection of t along the hyperplane defi...
Definition: transformer.c:1716
entity value_to_variable(entity)
Get the primitive variable associated to any value involved in a transformer.
Definition: value.c:1624
transformer active_transformer_list_to_transformer(list)
Reduce the sublist of active transformers in the transformer list ltl to one transformer using the co...
entity reference_to_address_of_value(reference)
Definition: value.c:889
list apply_transformer_lists_with_exclusion(list, list)
transformer transformer_halbwachs_fix_point(transformer)
Definition: fix_point.c:143
transformer transformer_add_equality(transformer, entity, entity)
Add an equality between two values (two variables?)
Definition: basic.c:436
list fprint_transformers(FILE *, list, get_variable_name_t)
Definition: io.c:105
transformer transformer_variables_filter(transformer, list)
Transformers are dealing with variables and/or variable values.
Definition: transformer.c:1827
list combine_transformer_lists(list, list)
each transformer of tl1 must be combined with a transformer of tl2, including the identity transforme...
string relation_to_string(string, Psysteme, char *(*)(entity))
Psysteme no_elim(Psysteme)
Definition: transformer.c:1306
transformer transformer_apply(transformer, transformer)
transformer transformer_apply(transformer tf, transformer pre): apply transformer tf on precondition ...
Definition: transformer.c:1559
transformer transformer_add_variable_incrementation(transformer, entity, Pvecteur)
transformer transformer_add_loop_index(transformer t, entity i, Pvecteur incr): add the index increme...
Definition: basic.c:260
bool transformer_equations_constrain_variable_p(const transformer, const entity)
Is value v used with a non-zero coefficient by the equations of transformer t?
Definition: basic.c:963
bool transformers_consistency_p(list)
Definition: basic.c:616
int number_of_analyzed_values(void)
Definition: value.c:1148
list transformer_list_preserved_variables(list, list, list)
returns the list of variables in vl which are not modified by transformers belonging to tl-tl_v.
Psysteme sc_multiply_constant_terms(Psysteme, Variable, bool)
Specific for the derivative fix point: each constant term in the constraints is multiplied by ik whic...
Definition: fix_point.c:1013
void add_address_of_value(reference, type)
Definition: value.c:1309
bool transformer_value_substitutable_p(transformer, entity, entity)
If e1 does not appear in t, it is substitutable.
Definition: transformer.c:2033
bool transformer_empty_p(transformer)
If true is returned, the transformer certainly is empty.
Definition: transformer.c:2455
transformer transformer_basic_fix_point(transformer)
Computation of a fix point: drop all constraints, remember which variables are changed.
Definition: fix_point.c:1280
transformer transformer_dup(transformer)
cproto-generated files
Definition: basic.c:49
bool sizeof_value_entity_p(entity)
Definition: value.c:969
bool analyzed_type_p(type)
The type t is one of the analyzed types.
Definition: value.c:367
bool hash_value_to_name_undefined_p(void)
Definition: value.c:1199
string transformer_to_string(transformer)
prettyprint.c
Definition: prettyprint.c:52
void add_value_to_transformer_space(entity, transformer)
Definition: basic.c:859
transformer transformer_safe_apply(transformer, transformer)
Definition: transformer.c:1627
transformer transformer_derivative_fix_point(transformer)
Computation of a transitive closure using constraints on the discrete derivative.
Definition: fix_point.c:1067
list transformer_projectable_values(transformer)
Definition: basic.c:827
transformer safe_transformer_projection(transformer, list)
t may be undefined, args may contain values unrelated to t
Definition: transformer.c:1187
const char * global_value_name_to_user_name(const char *)
HASH TABLE USE.
Definition: value.c:741
transformer print_transformer(transformer)
io.c
Definition: io.c:48
list transformer_to_analyzed_array_locations(transformer)
Definition: transformer.c:2776
char *(* get_variable_name_t)(Variable)
Definition: vecteur-local.h:62
void * Variable
arithmetique is a requirement for vecteur, but I do not want to inforce it in all pips files....
Definition: vecteur-local.h:60