PIPS
methods.c
Go to the documentation of this file.
1 /*
2 
3  $Id: methods.c 23412 2017-08-09 15:07:09Z irigoin $
4 
5  Copyright 1989-2016 MINES ParisTech
6 
7  This file is part of PIPS.
8 
9  PIPS is free software: you can redistribute it and/or modify it
10  under the terms of the GNU General Public License as published by
11  the Free Software Foundation, either version 3 of the License, or
12  any later version.
13 
14  PIPS is distributed in the hope that it will be useful, but WITHOUT ANY
15  WARRANTY; without even the implied warranty of MERCHANTABILITY or
16  FITNESS FOR A PARTICULAR PURPOSE.
17 
18  See the GNU General Public License for more details.
19 
20  You should have received a copy of the GNU General Public License
21  along with PIPS. If not, see <http://www.gnu.org/licenses/>.
22 
23 */
24 #ifdef HAVE_CONFIG_H
25  #include "pips_config.h"
26 #endif
27 /*
28  * package convex effects : Be'atrice Creusillet 5/97
29  *
30  * File: methods.c
31  * ~~~~~~~~~~~~~~~
32  *
33  * This File contains the interfaces with pipsmake which compute the various
34  * types of convex regions by using the generic functions.
35  *
36  */
37 #include <stdio.h>
38 #include <stdlib.h>
39 #include <string.h>
40 
41 #include "genC.h"
42 
43 #include "linear.h"
44 #include "ri.h"
45 #include "effects.h"
46 #include "database.h"
47 
48 #include "misc.h"
49 #include "ri-util.h"
50 #include "effects-util.h"
51 #include "transformer.h"
52 #include "semantics.h"
53 #include "properties.h"
54 #include "resources.h"
55 #include "pipsdbm.h"
56 #include "effects-generic.h"
57 #include "effects-convex.h"
58 
59 
60 /******************************************************* PIPSDBM INTERFACES */
61 
62 DB_GETPUT_SE(convex_proper_rw_pointer_regions, PROPER_POINTER_REGIONS)
63 DB_GETPUT_SE(convex_rw_pointer_regions, POINTER_REGIONS)
64 DB_GETPUT_SE(convex_invariant_rw_pointer_regions, INV_POINTER_REGIONS)
65 DB_GETPUT_LS(convex_summary_rw_pointer_regions, SUMMARY_POINTER_REGIONS)
66 DB_GETPUT_EE(convex_useful_variables_pointer_regions, USEFUL_VARIABLES_POINTER_REGIONS)
67 // Maybe do the same thing than USEFUL_VARIABLES_EFFECTS, resource never use...
68 
69 DB_GETPUT_SE(convex_proper_rw_regions, PROPER_REGIONS)
70 DB_GETPUT_SE(convex_rw_regions, REGIONS)
71 DB_GETPUT_SE(convex_invariant_rw_regions, INV_REGIONS)
72 DB_GETPUT_LS(convex_summary_rw_regions, SUMMARY_REGIONS)
73 DB_GETPUT_EE(convex_useful_variables_regions, USEFUL_VARIABLES_REGIONS)
74 
75 DB_GETPUT_SE(convex_in_regions, IN_REGIONS)
76 DB_GETPUT_SE(convex_invariant_in_regions, INV_IN_REGIONS)
77 DB_GETPUT_SE(convex_cumulated_in_regions, CUMULATED_IN_REGIONS)
78 DB_GETPUT_LS(convex_summary_in_regions, IN_SUMMARY_REGIONS)
79 DB_GETPUT_SE(convex_out_regions, OUT_REGIONS)
80 DB_GETPUT_LS(convex_summary_out_regions, OUT_SUMMARY_REGIONS)
81 
82 
83 // FC: this should probably be put somewhere else...
85  loop l, list *gin, list *gw,
86  bool (*r_w_combinable_p)(effect, effect),
87  entity * index, range r)
88 {
89  list global_in = *gin, global_write = *gw;
90  entity i = *index, i_prime = entity_undefined, new_i = entity_undefined;
91  descriptor range_descriptor = descriptor_undefined;
92  Value incr;
93  Pvecteur v_i_i_prime = VECTEUR_UNDEFINED;
94 
95  /* If the loop range cannot be represented in the chosen representation
96  * then, no useful computation can be performed.
97  */
99  {
100  pips_debug(7, "non linear loop range.\n");
102  return;
103  }
104 
105  bool saved_add_precondition_to_scalar_convex_regions =
107 
108  pips_debug(7, "linear loop range.\n");
109 
111 
112  /* OPTIMIZATION: */
113  /* keep only in global_write the write regions corresponding to
114  * regions in global_in. */
115  global_write =
116  effects_entities_intersection(global_write,
117  effects_dup(global_in),
119  pips_debug_effects(4, "reduced W(i)= \n", global_write);
120 
121  /* VIRTUAL NORMALIZATION OF LOOP (the new increment is equal
122  * to +/-1).
123  * This may result in a new loop index, new_i, with an updated
124  * range descriptor. Effects are updated at the same time.
125  */
126  // functions that can be pointed by loop_descriptor_make_func:
127  // loop_undefined_descriptor_make
128  // loop_convex_descriptor_make
129  range_descriptor = (*loop_descriptor_make_func)(l);
130 
131  /* first work around the fact that loop preconditions have not been
132  * added to scalar regions
133  */
134  global_write = scalar_regions_sc_append(
135  global_write, descriptor_convex(range_descriptor), true);
136  global_in = scalar_regions_sc_append(
137  global_in, descriptor_convex(range_descriptor), true);
138 
139  // functions that can be pointed by effects_loop_normalize_func:
140  // effects_loop_normalize_nop
141  // effects_undefined_loop_normalize
142  // convex_regions_loop_normalize
143  (*effects_loop_normalize_func)(global_write, i, r,
144  &new_i, range_descriptor, true);
145  // functions that can be pointed by effects_loop_normalize_func:
146  // effects_loop_normalize_nop
147  // effects_undefined_loop_normalize
148  // convex_regions_loop_normalize
149  (*effects_loop_normalize_func)(global_in, i, r,
150  &new_i, range_descriptor, false);
151 
152  if (!entity_undefined_p(new_i) && !same_entity_p(i, new_i)) {
153  add_intermediate_value(new_i);
154  i = new_i;
155  }
156 
157  /* COMPUTATION OF IN EFFECTS. We must remove the effects written
158  * in previous iterations i.e. IN(i) - U_i'(i'<i)[W(i')] for a
159  * positive increment, and IN(i) - U_i'(i < i')[W(i')]
160  * for a negative one.
161  */
162 
163  /* computation of W(i') */
164  /* i' is here an integer scalar value */
165  if (get_descriptor_range_p()) {
167  i_prime = entity_to_intermediate_value(i);
168  // functions that can be pointed by effects_descriptors_variable_change_func:
169  // effects_descriptors_variable_change_nop
170  // effects_undefined_descriptors_variable_change
171  // convex_regions_descriptor_variable_rename
172  (*effects_descriptors_variable_change_func)(global_write, i, i_prime);
173  }
174 
175  ifdebug(4){
176  pips_debug(4, "W(i')= \n");
177  (*effects_prettyprint_func)(global_write);
178  }
179 
180  /* We must take into account the fact that i<i' or i'<i. */
181  /* This is somewhat implementation dependent. BC. */
182 
184  {
187  v_i_i_prime = vect_make(
188  VECTEUR_NUL,
189  (Variable) (value_pos_p(incr) ? i_prime : i), VALUE_ONE,
190  (Variable) (value_pos_p(incr) ? i : i_prime), VALUE_MONE,
191  TCST, VALUE_ONE);
192  range_descriptor =
193  descriptor_inequality_add(range_descriptor, v_i_i_prime);
194  }
195 
196  // functions that can be pointed by effects_union_over_range_op:
197  // effects_union_over_range_nop
198  // simple_effects_union_over_range
199  // convex_regions_union_over_range
200  global_write = (*effects_union_over_range_op)(
201  global_write, i_prime, r, range_descriptor);
202  free_descriptor(range_descriptor);
203 
204  pips_debug_effects(4, "U_i'[W(i')] = \n", global_write);
205 
206  /* IN = IN(i) - U_i'[W(i')] */
207  // functions that can be pointed by effects_sup_difference_op:
208  // effects_undefined_binary_operator
209  // RegionsSupDifference
210  // EffectsSupDifference
211  global_in = (*effects_sup_difference_op)(global_in, global_write,
213  pips_debug_effects(4, "IN(i) - U_i'[W(i')] = \n", global_in);
214 
215  /* We eliminate the loop index */
216  // functions that can be pointed by effects_union_over_range_op:
217  // effects_union_over_range_nop
218  // simple_effects_union_over_range
219  // convex_regions_union_over_range
220  global_in = (*effects_union_over_range_op)(global_in, i, range_undefined,
223  saved_add_precondition_to_scalar_convex_regions;
224 
225  // modified results
226  *gin = global_in;
227  *gw = global_write;
228  *index = i;
229 }
230 
231 
232 /******************************************************************* SET... */
233 
234 void
236 {
240 
248 
255 
262 
263 
265  if (get_constant_paths_p())
266  {
267  switch (get_pointer_info_kind())
268  {
271  break;
272  case with_points_to:
274  break;
275  case with_pointer_values:
277  break;
278  default:
279  pips_internal_error("unexpected value\n");
280  }
281  }
282 
283 
288 
292 
296 
304 
306  // FI: sometimes in sequences, you need the completed transformer,
307  // some other times, for instance when moving from the loop body
308  // to the loop, you need the non-completed statement transformer
312 
314 
316 
317 
318  db_get_proper_rw_effects_func = db_get_convex_proper_rw_regions;
319  db_put_proper_rw_effects_func = db_put_convex_proper_rw_regions;
320 
321  db_get_invariant_rw_effects_func = db_get_convex_invariant_rw_regions;
322  db_put_invariant_rw_effects_func = db_put_convex_invariant_rw_regions;
323 
324  db_get_rw_effects_func = db_get_convex_rw_regions;
325  db_put_rw_effects_func = db_put_convex_rw_regions;
326 
327  db_get_summary_rw_effects_func = db_get_convex_summary_rw_regions;
328  db_put_summary_rw_effects_func = db_put_convex_summary_rw_regions;
329 
330  db_get_in_effects_func = db_get_convex_in_regions;
331  db_put_in_effects_func = db_put_convex_in_regions;
332 
333  db_get_cumulated_in_effects_func = db_get_convex_cumulated_in_regions;
334  db_put_cumulated_in_effects_func = db_put_convex_cumulated_in_regions;
335 
336  db_get_invariant_in_effects_func = db_get_convex_invariant_in_regions;
337  db_put_invariant_in_effects_func = db_put_convex_invariant_in_regions;
338 
339  db_get_summary_in_effects_func = db_get_convex_summary_in_regions;
340  db_put_summary_in_effects_func = db_put_convex_summary_in_regions;
341 
342  db_get_out_effects_func = db_get_convex_out_regions;
343  db_put_out_effects_func = db_put_convex_out_regions;
344 
345  db_get_summary_out_effects_func = db_get_convex_summary_out_regions;
346  db_put_summary_out_effects_func = db_put_convex_summary_out_regions;
347 
348  db_get_useful_variables_effects_func = db_get_convex_useful_variables_regions;
349  db_put_useful_variables_effects_func = db_put_convex_useful_variables_regions;
350 
353 
355 }
356 
357 
359 {
363 }
364 
366 {
370 
378 
385 
392 
397 
401 
405 
413 
418 
420 
422 
423 
424  db_get_proper_rw_effects_func = db_get_convex_proper_rw_pointer_regions;
425  db_put_proper_rw_effects_func = db_put_convex_proper_rw_pointer_regions;
426 
427  db_get_invariant_rw_effects_func = db_get_convex_invariant_rw_pointer_regions;
428  db_put_invariant_rw_effects_func = db_put_convex_invariant_rw_pointer_regions;
429 
430  db_get_rw_effects_func = db_get_convex_rw_pointer_regions;
431  db_put_rw_effects_func = db_put_convex_rw_pointer_regions;
432 
433  db_get_summary_rw_effects_func = db_get_convex_summary_rw_pointer_regions;
434  db_put_summary_rw_effects_func = db_put_convex_summary_rw_pointer_regions;
435 
436  db_get_in_effects_func = db_get_convex_in_regions;
437  db_put_in_effects_func = db_put_convex_in_regions;
438 
439  db_get_cumulated_in_effects_func = db_get_convex_cumulated_in_regions;
440  db_put_cumulated_in_effects_func = db_put_convex_cumulated_in_regions;
441 
442  db_get_invariant_in_effects_func = db_get_convex_invariant_in_regions;
443  db_put_invariant_in_effects_func = db_put_convex_invariant_in_regions;
444 
445  db_get_summary_in_effects_func = db_get_convex_summary_in_regions;
446  db_put_summary_in_effects_func = db_put_convex_summary_in_regions;
447 
448  db_get_out_effects_func = db_get_convex_out_regions;
449  db_put_out_effects_func = db_put_convex_out_regions;
450 
451  db_get_summary_out_effects_func = db_get_convex_summary_out_regions;
452  db_put_summary_out_effects_func = db_put_convex_summary_out_regions;
453 
454  db_get_useful_variables_effects_func = db_get_convex_useful_variables_pointer_regions;
455  db_put_useful_variables_effects_func = db_put_convex_useful_variables_pointer_regions;
456 
459 
462 
464 }
465 
466 
467 
468 
470 {
474 }
475 
477 {
478  // functions that can be pointed by effects_computation_init_func:
479  // effects_computation_no_init
480  // init_convex_in_out_regions
481  // init_convex_rw_regions
483 }
484 
486 {
487  pips_debug(1, "Init for module \"%s\".\n", module_name);
492 }
493 
494 void
496 {
497  regions_init();
500  (get_bool_property("REGIONS_TRANSLATION_STATISTICS"));
501 
502  /* Get the transformers and preconditions of the module. */
504  db_get_memory_resource(DBR_TRANSFORMERS, module_name, true) );
506  db_get_memory_resource(DBR_PRECONDITIONS, module_name, true) );
507 
508  /* for intermediate values */
510  db_get_memory_resource(DBR_CUMULATED_EFFECTS, module_name, true));
512  db_get_memory_resource(DBR_PROPER_EFFECTS, module_name, true));
515 
517 }
518 
520 {
521  pips_debug(1, "Init for module \"%s\".\n", module_name);
526 }
527 
529 {
530  regions_init();
531 
532  /* This very useful warning should be placed in pipsmake where IN
533  and OUT regions are requested. Moved to rmake() in pipsmake.c */
534  /* if (!same_string_p(rule_phase(find_rule_by_resource("REGIONS")), */
535  /* "MUST_REGIONS")) */
536  /* pips_user_warning("\nMUST REGIONS not selected - " */
537  /* "Do not expect wonderful results\n"); */
538 
539  set_bool_property("MUST_REGIONS", true);
540  set_bool_property("EXACT_REGIONS", true);
542 
543  /* Get the transformers and preconditions of the module. */
545  db_get_memory_resource(DBR_TRANSFORMERS, module_name, true) );
547  db_get_memory_resource(DBR_PRECONDITIONS, module_name, true) );
548 
549  /* for intermediate values */
551  db_get_memory_resource(DBR_CUMULATED_EFFECTS, module_name, true));
553  db_get_memory_resource(DBR_PROPER_EFFECTS, module_name, true));
556 
558 }
559 
561 {
562  regions_end();
567  // reset_proper_rw_effects();
569 }
570 
572 {
573  pips_debug(1, "Reset for module \"%s\".\n", module_name);
574  regions_end();
578  //reset_proper_rw_effects();
580 }
581 
582 void
584 {
585  regions_init();
586  /* for intermediate values */
588  db_get_memory_resource(DBR_CUMULATED_EFFECTS, module_name, true));
590  db_get_memory_resource(DBR_PROPER_EFFECTS, module_name, true));
593 
595 }
596 
598 {
599  pips_debug(1, "Reset for module \"%s\".\n", module_name);
600  regions_end();
602  //reset_proper_rw_effects();
604 }
605 
607 {
608  regions_init();
609  set_bool_property("MUST_REGIONS", true);
610  set_bool_property("EXACT_REGIONS", true);
612  /* for intermediate values */
614  db_get_memory_resource(DBR_CUMULATED_EFFECTS, module_name, true));
616  db_get_memory_resource(DBR_PROPER_EFFECTS, module_name, true));
619 
621 }
622 
624 {
625  pips_debug(1, "Reset for module \"%s\".\n", module_name);
627  effect_prettyprint_func = (void (*)(effect)) abort;
630 }
631 
632 void
634 {
635  pips_debug(1, "Reset for module \"%s\".\n", module_name);
636  regions_end();
638  //reset_proper_rw_effects();
640 }
float a2sf[2] __attribute__((aligned(16)))
USER generates a user error (i.e., non fatal) by printing the given MSG according to the FMT.
Definition: 3dnow.h:3
void free_descriptor(descriptor p)
Definition: effects.c:392
#define value_pos_p(val)
#define VALUE_MONE
int Value
#define VALUE_ONE
transformer load_completed_statement_transformer(statement s)
three mappings used throughout semantics analysis:
struct _newgen_struct_effect_ * effect
Definition: dg.h:21
list RegionsSupDifference(list l1, list l2, bool(*difference_combinable_p)(effect, effect))
list RegionsSupDifference(list l1, l2) input : two lists of regions output : a list of region,...
effect regions_must_convex_hull(region f1, region f2)
1- Union :
list RegionsMustUnion(list l1, list l2, bool(*union_combinable_p)(effect, effect))
list RegionsMustUnion(list l1, list l2, union_combinable_p) input : two lists of regions output : a l...
list RegionsMayUnion(list l1, list l2, bool(*union_combinable_p)(effect, effect))
list RegionsMayUnion(list l1, list l2, union_combinable_p) input : two lists of regions output : a li...
list RegionsInfDifference(list l1, list l2, bool(*difference_combinable_p)(effect, effect))
list RegionsInfDifference(list l1, l2) input : two lists of regions output : a list of region,...
list RegionsIntersection(list l1, list l2, bool(*intersection_combinable_p)(effect, effect))
list RegionsIntersection(list l1,l2, bool (*intersection_combinable_p)(effect, effect)) input : outpu...
bool region_consistent_p(region reg)
Definition: debug.c:50
void reset_convex_rw_regions(const char *module_name)
Definition: methods.c:560
void set_methods_for_convex_rw_effects()
Definition: methods.c:358
void init_convex_inout_prettyprint(const char *__attribute__((unused)) module_name)
Definition: methods.c:519
void set_methods_for_convex_in_out_effects()
Definition: methods.c:469
void init_convex_rw_regions(const char *module_name)
Definition: methods.c:495
void init_convex_summary_rw_regions(const char *module_name)
Definition: methods.c:583
void reset_convex_summary_in_out_regions(const char *__attribute__((unused)) module_name)
Definition: methods.c:633
void reset_convex_in_out_regions(const char *__attribute__((unused)) module_name)
Definition: methods.c:571
static void convex_in_effect_loop_range_fix(loop l, list *gin, list *gw, bool(*r_w_combinable_p)(effect, effect), entity *index, range r)
Definition: methods.c:84
void set_methods_for_convex_rw_pointer_effects()
Definition: methods.c:365
void reset_convex_prettyprint(const char *__attribute__((unused)) module_name)
Definition: methods.c:623
void init_convex_rw_prettyprint(const char *__attribute__((unused)) module_name)
Definition: methods.c:485
void init_convex_summary_in_out_regions(const char *module_name)
Definition: methods.c:606
bool in_out_methods_p()
Definition: methods.c:476
void init_convex_in_out_regions(const char *module_name)
Definition: methods.c:528
void reset_convex_summary_rw_regions(const char *__attribute__((unused)) module_name)
Definition: methods.c:597
void set_methods_for_convex_effects()
methods.c
Definition: methods.c:235
list eval_convex_cell_with_points_to(cell, descriptor, list, bool *, transformer)
Definition: eval.c:275
void convex_region_change_ith_dimension_expression(effect, expression, int)
void convex_region_descriptor_translation(effect)
descriptor loop_convex_descriptor_make(loop)
list convex_regions_descriptor_variable_rename(list, entity, entity)
void get_in_out_regions_properties(void)
list convex_effect_to_constant_path_effects_with_pointer_values(effect)
void regions_end(void)
effect reference_to_convex_region(reference, action, bool)
unary_operators.c
bool empty_convex_context_p(transformer)
list convex_effect_to_constant_path_effects_with_points_to(effect)
Definition: eval.c:285
void region_free(effect)
void convex_regions_translation_init(entity, list, bool)
interprocedural.c
void print_rw_regions(list)
void regions_init(void)
bool add_precondition_to_scalar_convex_regions
list region_to_store_independent_region_list(effect, bool)
list c_convex_effects_on_formal_parameter_backward_translation(list, expression, transformer)
text text_rw_array_regions(list)
list c_convex_effects_on_actual_parameter_forward_translation(entity, expression, entity, list, transformer)
void get_regions_properties(void)
void convex_effects_descriptor_normalize(list)
list convex_regions_backward_translation(entity, list, list, transformer)
of effects
text text_inout_array_regions(list)
void region_translation_statistics_init(bool)
translation.c
Definition: translation.c:162
descriptor vector_to_convex_descriptor(Pvecteur)
effect region_dup(effect)
void convex_regions_translation_end(void)
list scalar_regions_sc_append(list, Psysteme, bool)
list convex_regions_loop_normalize(list, entity, range, entity *, descriptor, bool)
void region_translation_statistics_close(const char *, const char *)
Definition: translation.c:212
list convex_regions_forward_translation(entity, list, list, transformer)
of effects
void convex_region_add_expression_dimension(effect, expression)
list convex_regions_precondition_compose(list, transformer, bool)
void print_inout_regions(list)
list regions_dynamic_elim(list)
list regions_dynamic_elim(list l_reg) input : a list of regions.
list convex_regions_union_over_range(list, entity, range, descriptor)
list convex_regions_transformer_compose(list, transformer)
compose.c
list convex_regions_inverse_transformer_compose(list, transformer)
#define DB_GETPUT_LS(name, NAME)
#define ACTION_WRITE
#define pips_debug_effects(level, message, l_eff)
#define ACTION_IN
#define ACTION_OUT
#define ACTION_READ
#define DB_GETPUT_EE(name, NAME)
void(* generic_prettyprint_function)(list)
#define DB_GETPUT_SE(name, NAME)
@ with_points_to
@ with_no_pointer_info
@ with_pointer_values
text(* generic_text_function)(list)
prettyprint function types:
transformer(* load_transformer_func)(statement)
effect(* effect_union_op)(effect, effect)
list(* effects_sup_difference_op)(list, list, bool(*eff1_eff2_combinable_p)(effect, effect))
void(* db_put_invariant_in_effects_func)(const char *, statement_effects)
list(* fortran_effects_backward_translation_op)(entity, list, list, transformer)
statement_effects(* db_get_invariant_in_effects_func)(const char *)
void(* db_put_summary_in_effects_func)(const char *, list)
void(* db_put_in_effects_func)(const char *, statement_effects)
void effects_to_may_effects(list)
list(* effect_to_constant_path_effects_func)(effect)
bool(* empty_context_test)(transformer)
list(* effects_intersection_op)(list, list, bool(*eff1_eff2_combinable_p)(effect, effect))
transformer(* load_completed_transformer_func)(statement)
effect effect_nop(effect)
list(* c_effects_on_formal_parameter_backward_translation_func)(list, expression, transformer)
transformer(* load_context_func)(statement)
effect(* proper_to_summary_effect_func)(effect)
list(* effects_union_op)(list, list, bool(*eff1_eff2_combinable_p)(effect, effect))
void(* db_put_rw_effects_func)(const char *, statement_effects)
void(* effect_descriptor_interprocedural_translation_op)(effect)
void(* db_put_useful_variables_effects_func)(const char *, entity_effects)
void(* effects_translation_end_func)(void)
void(* effects_descriptor_normalize_func)(list)
pointer_info_val get_pointer_info_kind(void)
list(* effects_transformer_composition_op)(list, transformer)
void(* db_put_invariant_rw_effects_func)(const char *, statement_effects)
statement_effects(* db_get_invariant_rw_effects_func)(const char *)
list(* effect_to_store_independent_effect_list_func)(effect, bool)
bool(* effect_consistent_p_func)(effect)
list effect_to_constant_path_effects_with_no_pointer_information(effect)
void(* loop_range_in_effect_func)(loop, list *, list *, bool(*)(effect, effect), entity *, range)
void reset_action_interpretation(void)
descriptor(* loop_descriptor_make_func)(loop)
void(* effect_free_func)(effect eff)
bool w_r_combinable_p(effect, effect)
list(* effects_local_to_global_translation_op)(list)
list(* db_get_summary_in_effects_func)(const char *)
effect(* reference_to_effect_func)(reference, action, bool)
statement_effects(* db_get_out_effects_func)(const char *)
void(* db_put_out_effects_func)(const char *, statement_effects)
bool get_descriptor_range_p(void)
void set_descriptor_range_p(bool)
void reset_proper_rw_effects(void)
void(* effects_computation_init_func)(const char *)
void set_proper_rw_effects(statement_effects)
text(* effects_to_text_func)(list)
list(* db_get_summary_out_effects_func)(const char *)
bool normalizable_and_linear_loop_p(entity, range)
entity_effects(* db_get_useful_variables_effects_func)(const char *)
descriptor descriptor_inequality_add(descriptor, Pvecteur)
statement_effects(* db_get_cumulated_in_effects_func)(const char *)
list(* effects_test_union_op)(list, list, bool(*eff1_eff2_combinable_p)(effect, effect))
void set_cumulated_rw_effects(statement_effects)
void(* effects_translation_init_func)(entity, list, bool)
void set_action_interpretation(string, string)
prettyprint.c
list effects_dup(list)
list(* effects_loop_normalize_func)(list, entity, range, entity *, descriptor, bool)
list effects_entities_intersection(list, list, bool(*)(effect, effect))
void(* effect_prettyprint_func)(effect)
void set_contracted_proper_effects(bool)
end of effects-generic-local.h
bool get_constant_paths_p(void)
void(* db_put_summary_out_effects_func)(const char *, list)
list(* effects_descriptors_variable_change_func)(list, entity, entity)
descriptor(* vector_to_descriptor_func)(Pvecteur)
void(* db_put_summary_rw_effects_func)(const char *, list)
void(* effect_add_expression_dimension_func)(effect eff, expression exp)
void(* effects_computation_reset_func)(const char *)
void(* db_put_cumulated_in_effects_func)(const char *, statement_effects)
list(* effects_inf_difference_op)(list, list, bool(*eff1_eff2_combinable_p)(effect, effect))
effect(* effect_dup_func)(effect eff)
statement_effects(* db_get_in_effects_func)(const char *)
list(* fortran_effects_forward_translation_op)(entity, list, list, transformer)
void(* effect_change_ith_dimension_expression_func)(effect eff, expression exp, int i)
void(* db_put_proper_rw_effects_func)(const char *, statement_effects)
bool r_w_combinable_p(effect, effect)
list(* eval_cell_with_points_to_func)(cell, descriptor, list, bool *, transformer)
void(* effects_prettyprint_func)(list)
statement_effects(* db_get_proper_rw_effects_func)(const char *)
list(* effects_union_over_range_op)(list, entity, range, descriptor)
void reset_cumulated_rw_effects(void)
list(* effects_transformer_inverse_composition_op)(list, transformer)
list(* db_get_summary_rw_effects_func)(const char *)
bool(* stmt_strongly_feasible_p_func)(statement)
list(* effects_precondition_composition_op)(list, transformer, bool)
statement_effects(* db_get_rw_effects_func)(const char *)
list(* c_effects_on_actual_parameter_forward_translation_func)(entity, expression, entity, list, transformer)
#define descriptor_undefined
Definition: effects.h:559
#define descriptor_convex(x)
Definition: effects.h:601
const char * module_name(const char *s)
Return the module part of an entity name.
Definition: entity_names.c:296
bool get_bool_property(const string)
FC 2015-07-20: yuk, moved out to prevent an include cycle dependency include "properties....
string db_get_memory_resource(const char *rname, const char *oname, bool pure)
Return the pointer to the resource, whatever it is.
Definition: database.c:755
#define pips_debug
these macros use the GNU extensions that allow variadic macros, including with an empty list.
Definition: misc-local.h:145
#define pips_internal_error
Definition: misc-local.h:149
#define abort()
Definition: misc-local.h:53
#define print_region(x)
Definition: print.c:343
void set_bool_property(const char *, bool)
#define NORMALIZE_EXPRESSION(e)
bool same_entity_p(entity e1, entity e2)
predicates on entities
Definition: entity.c:1321
entity module_name_to_entity(const char *mn)
This is an alias for local_name_to_top_level_entity.
Definition: entity.c:1479
#define range_undefined
Definition: ri.h:2263
#define range_increment(x)
Definition: ri.h:2292
#define entity_undefined_p(x)
Definition: ri.h:2762
#define entity_undefined
Definition: ri.h:2761
#define normalized_linear(x)
Definition: ri.h:1781
void module_to_value_mappings(entity m)
void module_to_value_mappings(entity m): build hash tables between variables and values (old,...
Definition: mappings.c:624
bool statement_strongly_feasible_p(statement)
Return true if statement s is reachable according to its precondition.
Definition: utils.c:99
transformer load_statement_precondition(statement)
void set_transformer_map(statement_mapping)
transformer load_statement_transformer(statement)
void reset_precondition_map(void)
void set_precondition_map(statement_mapping)
void reset_transformer_map(void)
#define ifdebug(n)
Definition: sg.c:47
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
entity entity_to_intermediate_value(entity)
Definition: value.c:879
void add_intermediate_value(entity)
Definition: value.c:1476
void free_value_mappings(void)
Normal call to free the mappings.
Definition: value.c:1212
#define TCST
VARIABLE REPRESENTANT LE TERME CONSTANT.
#define VECTEUR_NUL
DEFINITION DU VECTEUR NUL.
#define VECTEUR_UNDEFINED
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
Pvecteur vect_make(Pvecteur v, Variable var, Value val,...)
Pvecteur vect_make(v, [var, val,]* 0, val) Pvecteur v; // may be NULL, use assigne anyway Variable va...
Definition: alloc.c:165
Value vect_coeff(Variable var, Pvecteur vect)
Variable vect_coeff(Variable var, Pvecteur vect): coefficient de coordonnee var du vecteur vect —> So...
Definition: unaires.c:228