PIPS
methods.c File Reference
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "genC.h"
#include "linear.h"
#include "ri.h"
#include "effects.h"
#include "database.h"
#include "misc.h"
#include "ri-util.h"
#include "effects-util.h"
#include "transformer.h"
#include "semantics.h"
#include "properties.h"
#include "resources.h"
#include "pipsdbm.h"
#include "effects-generic.h"
#include "effects-convex.h"
+ Include dependency graph for methods.c:

Go to the source code of this file.

Functions

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)
 
void set_methods_for_convex_effects ()
 methods.c More...
 
void set_methods_for_convex_rw_effects ()
 
void set_methods_for_convex_rw_pointer_effects ()
 
void set_methods_for_convex_in_out_effects ()
 
bool in_out_methods_p ()
 
void init_convex_rw_prettyprint (const char *__attribute__((unused)) module_name)
 
void init_convex_rw_regions (const char *module_name)
 
void init_convex_inout_prettyprint (const char *__attribute__((unused)) module_name)
 
void init_convex_in_out_regions (const char *module_name)
 
void reset_convex_rw_regions (const char *module_name)
 
void reset_convex_in_out_regions (const char *__attribute__((unused)) module_name)
 
void init_convex_summary_rw_regions (const char *module_name)
 
void reset_convex_summary_rw_regions (const char *__attribute__((unused)) module_name)
 
void init_convex_summary_in_out_regions (const char *module_name)
 
void reset_convex_prettyprint (const char *__attribute__((unused)) module_name)
 
void reset_convex_summary_in_out_regions (const char *__attribute__((unused)) module_name)
 

Function Documentation

◆ convex_in_effect_loop_range_fix()

static void convex_in_effect_loop_range_fix ( loop  l,
list gin,
list gw,
bool(*)(effect, effect r_w_combinable_p,
entity index,
range  r 
)
static

If the loop range cannot be represented in the chosen representation then, no useful computation can be performed.

OPTIMIZATION:

keep only in global_write the write regions corresponding to regions in global_in.

VIRTUAL NORMALIZATION OF LOOP (the new increment is equal to +/-1). This may result in a new loop index, new_i, with an updated range descriptor. Effects are updated at the same time.

first work around the fact that loop preconditions have not been added to scalar regions

COMPUTATION OF IN EFFECTS. We must remove the effects written in previous iterations i.e. IN(i) - U_i'(i'<i)[W(i')] for a positive increment, and IN(i) - U_i'(i < i')[W(i')] for a negative one.

computation of W(i')

i' is here an integer scalar value

We must take into account the fact that i<i' or i'<i.

This is somewhat implementation dependent. BC.

IN = IN(i) - U_i'[W(i')]

We eliminate the loop index

Definition at line 84 of file methods.c.

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 }
void free_descriptor(descriptor p)
Definition: effects.c:392
#define value_pos_p(val)
#define VALUE_MONE
int Value
#define VALUE_ONE
bool add_precondition_to_scalar_convex_regions
list scalar_regions_sc_append(list, Psysteme, bool)
#define pips_debug_effects(level, message, l_eff)
void effects_to_may_effects(list)
bool w_r_combinable_p(effect, effect)
bool get_descriptor_range_p(void)
bool normalizable_and_linear_loop_p(entity, range)
descriptor descriptor_inequality_add(descriptor, Pvecteur)
list effects_dup(list)
list effects_entities_intersection(list, list, bool(*)(effect, effect))
bool r_w_combinable_p(effect, effect)
#define descriptor_undefined
Definition: effects.h:559
#define descriptor_convex(x)
Definition: effects.h:601
#define pips_debug
these macros use the GNU extensions that allow variadic macros, including with an empty list.
Definition: misc-local.h:145
#define NORMALIZE_EXPRESSION(e)
bool same_entity_p(entity e1, entity e2)
predicates on entities
Definition: entity.c:1321
#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
#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
#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

References add_intermediate_value(), add_precondition_to_scalar_convex_regions, descriptor_convex, descriptor_inequality_add(), descriptor_undefined, effects_dup(), effects_entities_intersection(), effects_to_may_effects(), entity_to_intermediate_value(), entity_undefined, entity_undefined_p, free_descriptor(), get_descriptor_range_p(), ifdebug, normalizable_and_linear_loop_p(), NORMALIZE_EXPRESSION, normalized_linear, pips_debug, pips_debug_effects, r_w_combinable_p(), range_increment, range_undefined, same_entity_p(), scalar_regions_sc_append(), TCST, VALUE_MONE, VALUE_ONE, value_pos_p, vect_coeff(), vect_make(), VECTEUR_NUL, VECTEUR_UNDEFINED, and w_r_combinable_p().

Referenced by set_methods_for_convex_effects(), and set_methods_for_convex_rw_pointer_effects().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ in_out_methods_p()

bool in_out_methods_p ( void  )

Definition at line 476 of file methods.c.

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 }
void init_convex_in_out_regions(const char *module_name)
Definition: methods.c:528
void(* effects_computation_init_func)(const char *)

References effects_computation_init_func, and init_convex_in_out_regions().

Referenced by c_convex_effects_on_actual_parameter_forward_translation().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ init_convex_in_out_regions()

void init_convex_in_out_regions ( const char *  module_name)

This very useful warning should be placed in pipsmake where IN and OUT regions are requested. Moved to rmake() in pipsmake.c

if (!same_string_p(rule_phase(find_rule_by_resource("REGIONS")),

"MUST_REGIONS"))

pips_user_warning("\nMUST REGIONS not selected - "

"Do not expect wonderful results\n");

Get the transformers and preconditions of the module.

for intermediate values

Parameters
module_nameodule_name

Definition at line 528 of file methods.c.

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 }
void init_convex_inout_prettyprint(const char *__attribute__((unused)) module_name)
Definition: methods.c:519
void get_in_out_regions_properties(void)
void regions_init(void)
void reset_proper_rw_effects(void)
void set_proper_rw_effects(statement_effects)
void set_cumulated_rw_effects(statement_effects)
const char * module_name(const char *s)
Return the module part of an entity name.
Definition: entity_names.c:296
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
void set_bool_property(const char *, bool)
entity module_name_to_entity(const char *mn)
This is an alias for local_name_to_top_level_entity.
Definition: entity.c:1479
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
void set_transformer_map(statement_mapping)
void set_precondition_map(statement_mapping)

References db_get_memory_resource(), get_in_out_regions_properties(), init_convex_inout_prettyprint(), module_name(), module_name_to_entity(), module_to_value_mappings(), regions_init(), reset_proper_rw_effects(), set_bool_property(), set_cumulated_rw_effects(), set_precondition_map(), set_proper_rw_effects(), and set_transformer_map().

Referenced by in_out_methods_p(), and set_methods_for_convex_in_out_effects().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ init_convex_inout_prettyprint()

void init_convex_inout_prettyprint ( const char *__attribute__((unused))  module_name)

Definition at line 519 of file methods.c.

520 {
521  pips_debug(1, "Init for module \"%s\".\n", module_name);
526 }
text text_inout_array_regions(list)
void print_inout_regions(list)
#define ACTION_IN
#define ACTION_OUT
text(* effects_to_text_func)(list)
void set_action_interpretation(string, string)
prettyprint.c
void(* effect_prettyprint_func)(effect)
void(* effects_prettyprint_func)(list)
#define print_region(x)
Definition: print.c:343

References ACTION_IN, ACTION_OUT, effect_prettyprint_func, effects_prettyprint_func, effects_to_text_func, module_name(), pips_debug, print_inout_regions(), print_region, set_action_interpretation(), and text_inout_array_regions().

Referenced by init_convex_in_out_regions(), and init_convex_summary_in_out_regions().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ init_convex_rw_prettyprint()

void init_convex_rw_prettyprint ( const char *__attribute__((unused))  module_name)

Definition at line 485 of file methods.c.

486 {
487  pips_debug(1, "Init for module \"%s\".\n", module_name);
492 }
void print_rw_regions(list)
text text_rw_array_regions(list)
#define ACTION_WRITE
#define ACTION_READ

References ACTION_READ, ACTION_WRITE, effect_prettyprint_func, effects_prettyprint_func, effects_to_text_func, module_name(), pips_debug, print_region, print_rw_regions(), set_action_interpretation(), and text_rw_array_regions().

Referenced by init_convex_rw_regions(), and init_convex_summary_rw_regions().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ init_convex_rw_regions()

void init_convex_rw_regions ( const char *  module_name)

Get the transformers and preconditions of the module.

for intermediate values

Parameters
module_nameodule_name

Definition at line 495 of file methods.c.

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 }
void init_convex_rw_prettyprint(const char *__attribute__((unused)) module_name)
Definition: methods.c:485
void get_regions_properties(void)
void region_translation_statistics_init(bool)
translation.c
Definition: translation.c:162
bool get_bool_property(const string)
FC 2015-07-20: yuk, moved out to prevent an include cycle dependency include "properties....

References db_get_memory_resource(), get_bool_property(), get_regions_properties(), init_convex_rw_prettyprint(), module_name(), module_name_to_entity(), module_to_value_mappings(), region_translation_statistics_init(), regions_init(), reset_proper_rw_effects(), set_cumulated_rw_effects(), set_precondition_map(), set_proper_rw_effects(), and set_transformer_map().

Referenced by set_methods_for_convex_rw_effects(), set_methods_for_convex_rw_pointer_effects(), and step_analyse().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ init_convex_summary_in_out_regions()

void init_convex_summary_in_out_regions ( const char *  module_name)

for intermediate values

Parameters
module_nameodule_name

Definition at line 606 of file methods.c.

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 }

References db_get_memory_resource(), get_in_out_regions_properties(), init_convex_inout_prettyprint(), module_name(), module_name_to_entity(), module_to_value_mappings(), regions_init(), reset_proper_rw_effects(), set_bool_property(), set_cumulated_rw_effects(), and set_proper_rw_effects().

+ Here is the call graph for this function:

◆ init_convex_summary_rw_regions()

void init_convex_summary_rw_regions ( const char *  module_name)

for intermediate values

Parameters
module_nameodule_name

Definition at line 583 of file methods.c.

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 }

References db_get_memory_resource(), init_convex_rw_prettyprint(), module_name(), module_name_to_entity(), module_to_value_mappings(), regions_init(), reset_proper_rw_effects(), set_cumulated_rw_effects(), and set_proper_rw_effects().

+ Here is the call graph for this function:

◆ reset_convex_in_out_regions()

void reset_convex_in_out_regions ( const char *__attribute__((unused))  module_name)

Definition at line 571 of file methods.c.

572 {
573  pips_debug(1, "Reset for module \"%s\".\n", module_name);
574  regions_end();
578  //reset_proper_rw_effects();
580 }
void regions_end(void)
void reset_cumulated_rw_effects(void)
void reset_precondition_map(void)
void reset_transformer_map(void)
void free_value_mappings(void)
Normal call to free the mappings.
Definition: value.c:1212

References free_value_mappings(), module_name(), pips_debug, regions_end(), reset_cumulated_rw_effects(), reset_precondition_map(), and reset_transformer_map().

Referenced by set_methods_for_convex_in_out_effects().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ reset_convex_prettyprint()

void reset_convex_prettyprint ( const char *__attribute__((unused))  module_name)

Definition at line 623 of file methods.c.

624 {
625  pips_debug(1, "Reset for module \"%s\".\n", module_name);
627  effect_prettyprint_func = (void (*)(effect)) abort;
630 }
struct _newgen_struct_effect_ * effect
Definition: dg.h:21
void(* generic_prettyprint_function)(list)
text(* generic_text_function)(list)
prettyprint function types:
void reset_action_interpretation(void)
#define abort()
Definition: misc-local.h:53

References abort, effect_prettyprint_func, effects_prettyprint_func, effects_to_text_func, module_name(), pips_debug, and reset_action_interpretation().

+ Here is the call graph for this function:

◆ reset_convex_rw_regions()

void reset_convex_rw_regions ( const char *  module_name)
Parameters
module_nameodule_name

Definition at line 560 of file methods.c.

561 {
562  regions_end();
567  // reset_proper_rw_effects();
569 }
void region_translation_statistics_close(const char *, const char *)
Definition: translation.c:212

References free_value_mappings(), module_name(), region_translation_statistics_close(), regions_end(), reset_cumulated_rw_effects(), reset_precondition_map(), and reset_transformer_map().

Referenced by set_methods_for_convex_rw_effects(), set_methods_for_convex_rw_pointer_effects(), and step_analyse().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ reset_convex_summary_in_out_regions()

void reset_convex_summary_in_out_regions ( const char *__attribute__((unused))  module_name)

Definition at line 633 of file methods.c.

634 {
635  pips_debug(1, "Reset for module \"%s\".\n", module_name);
636  regions_end();
638  //reset_proper_rw_effects();
640 }

References free_value_mappings(), module_name(), pips_debug, regions_end(), and reset_cumulated_rw_effects().

+ Here is the call graph for this function:

◆ reset_convex_summary_rw_regions()

void reset_convex_summary_rw_regions ( const char *__attribute__((unused))  module_name)

Definition at line 597 of file methods.c.

598 {
599  pips_debug(1, "Reset for module \"%s\".\n", module_name);
600  regions_end();
602  //reset_proper_rw_effects();
604 }

References free_value_mappings(), module_name(), pips_debug, regions_end(), and reset_cumulated_rw_effects().

+ Here is the call graph for this function:

◆ set_methods_for_convex_effects()

void set_methods_for_convex_effects ( void  )

methods.c

Definition at line 235 of file methods.c.

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 }
transformer load_completed_statement_transformer(statement s)
three mappings used throughout semantics analysis:
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
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
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)
list convex_effect_to_constant_path_effects_with_pointer_values(effect)
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
list region_to_store_independent_region_list(effect, bool)
list c_convex_effects_on_formal_parameter_backward_translation(list, expression, transformer)
list c_convex_effects_on_actual_parameter_forward_translation(entity, expression, entity, list, transformer)
void convex_effects_descriptor_normalize(list)
list convex_regions_backward_translation(entity, list, list, transformer)
of effects
descriptor vector_to_convex_descriptor(Pvecteur)
effect region_dup(effect)
void convex_regions_translation_end(void)
list convex_regions_loop_normalize(list, entity, range, entity *, descriptor, bool)
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)
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)
@ with_points_to
@ with_no_pointer_info
@ with_pointer_values
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)
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)
descriptor(* loop_descriptor_make_func)(loop)
void(* effect_free_func)(effect eff)
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)
void set_descriptor_range_p(bool)
list(* db_get_summary_out_effects_func)(const char *)
entity_effects(* db_get_useful_variables_effects_func)(const char *)
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(* effects_translation_init_func)(entity, list, bool)
list(* effects_loop_normalize_func)(list, entity, range, entity *, descriptor, bool)
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(* 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)
list(* eval_cell_with_points_to_func)(cell, descriptor, list, bool *, transformer)
statement_effects(* db_get_proper_rw_effects_func)(const char *)
list(* effects_union_over_range_op)(list, entity, range, descriptor)
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 pips_internal_error
Definition: misc-local.h:149
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)
transformer load_statement_transformer(statement)

References c_convex_effects_on_actual_parameter_forward_translation(), c_convex_effects_on_formal_parameter_backward_translation(), c_effects_on_actual_parameter_forward_translation_func, c_effects_on_formal_parameter_backward_translation_func, convex_effect_to_constant_path_effects_with_pointer_values(), convex_effect_to_constant_path_effects_with_points_to(), convex_effects_descriptor_normalize(), convex_in_effect_loop_range_fix(), convex_region_add_expression_dimension(), convex_region_change_ith_dimension_expression(), convex_region_descriptor_translation(), convex_regions_backward_translation(), convex_regions_descriptor_variable_rename(), convex_regions_forward_translation(), convex_regions_inverse_transformer_compose(), convex_regions_loop_normalize(), convex_regions_precondition_compose(), convex_regions_transformer_compose(), convex_regions_translation_end(), convex_regions_translation_init(), convex_regions_union_over_range(), db_get_cumulated_in_effects_func, db_get_in_effects_func, db_get_invariant_in_effects_func, db_get_invariant_rw_effects_func, db_get_out_effects_func, db_get_proper_rw_effects_func, db_get_rw_effects_func, db_get_summary_in_effects_func, db_get_summary_out_effects_func, db_get_summary_rw_effects_func, db_get_useful_variables_effects_func, db_put_cumulated_in_effects_func, db_put_in_effects_func, db_put_invariant_in_effects_func, db_put_invariant_rw_effects_func, db_put_out_effects_func, db_put_proper_rw_effects_func, db_put_rw_effects_func, db_put_summary_in_effects_func, db_put_summary_out_effects_func, db_put_summary_rw_effects_func, db_put_useful_variables_effects_func, effect_add_expression_dimension_func, effect_change_ith_dimension_expression_func, effect_consistent_p_func, effect_descriptor_interprocedural_translation_op, effect_dup_func, effect_free_func, effect_nop(), effect_to_constant_path_effects_func, effect_to_constant_path_effects_with_no_pointer_information(), effect_to_store_independent_effect_list_func, effect_union_op, effects_descriptor_normalize_func, effects_descriptors_variable_change_func, effects_inf_difference_op, effects_intersection_op, effects_local_to_global_translation_op, effects_loop_normalize_func, effects_precondition_composition_op, effects_sup_difference_op, effects_test_union_op, effects_transformer_composition_op, effects_transformer_inverse_composition_op, effects_translation_end_func, effects_translation_init_func, effects_union_op, effects_union_over_range_op, empty_context_test, empty_convex_context_p(), eval_cell_with_points_to_func, eval_convex_cell_with_points_to(), fortran_effects_backward_translation_op, fortran_effects_forward_translation_op, get_constant_paths_p(), get_pointer_info_kind(), load_completed_statement_transformer(), load_completed_transformer_func, load_context_func, load_statement_precondition(), load_statement_transformer(), load_transformer_func, loop_convex_descriptor_make(), loop_descriptor_make_func, loop_range_in_effect_func, pips_internal_error, proper_to_summary_effect_func, reference_to_convex_region(), reference_to_effect_func, region_consistent_p(), region_dup(), region_free(), region_to_store_independent_region_list(), regions_dynamic_elim(), regions_must_convex_hull(), RegionsInfDifference(), RegionsIntersection(), RegionsMayUnion(), RegionsMustUnion(), RegionsSupDifference(), set_contracted_proper_effects(), set_descriptor_range_p(), statement_strongly_feasible_p(), stmt_strongly_feasible_p_func, vector_to_convex_descriptor(), vector_to_descriptor_func, with_no_pointer_info, with_pointer_values, and with_points_to.

Referenced by bdsc_code_instrumentation(), dsc_code_parallelization(), hbdsc_parallelization(), pragma_outliner(), regions_to_loops(), sequence_dependence_graph(), set_methods_for_convex_in_out_effects(), set_methods_for_convex_rw_effects(), spire_distributed_unstructured_to_structured(), and step_analyse().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ set_methods_for_convex_in_out_effects()

void set_methods_for_convex_in_out_effects ( void  )

Definition at line 469 of file methods.c.

470 {
474 }
void reset_convex_in_out_regions(const char *__attribute__((unused)) module_name)
Definition: methods.c:571
void set_methods_for_convex_effects()
methods.c
Definition: methods.c:235
void(* effects_computation_reset_func)(const char *)

References effects_computation_init_func, effects_computation_reset_func, init_convex_in_out_regions(), reset_convex_in_out_regions(), and set_methods_for_convex_effects().

Referenced by c_convex_effects_on_actual_parameter_forward_translation().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ set_methods_for_convex_rw_effects()

void set_methods_for_convex_rw_effects ( void  )

Definition at line 358 of file methods.c.

359 {
363 }
void reset_convex_rw_regions(const char *module_name)
Definition: methods.c:560
void init_convex_rw_regions(const char *module_name)
Definition: methods.c:495

References effects_computation_init_func, effects_computation_reset_func, init_convex_rw_regions(), reset_convex_rw_regions(), and set_methods_for_convex_effects().

Referenced by c_convex_effects_on_actual_parameter_forward_translation().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ set_methods_for_convex_rw_pointer_effects()

void set_methods_for_convex_rw_pointer_effects ( void  )

Definition at line 365 of file methods.c.

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 }

References c_convex_effects_on_actual_parameter_forward_translation(), c_convex_effects_on_formal_parameter_backward_translation(), c_effects_on_actual_parameter_forward_translation_func, c_effects_on_formal_parameter_backward_translation_func, convex_effects_descriptor_normalize(), convex_in_effect_loop_range_fix(), convex_region_add_expression_dimension(), convex_region_change_ith_dimension_expression(), convex_region_descriptor_translation(), convex_regions_backward_translation(), convex_regions_descriptor_variable_rename(), convex_regions_forward_translation(), convex_regions_inverse_transformer_compose(), convex_regions_loop_normalize(), convex_regions_precondition_compose(), convex_regions_transformer_compose(), convex_regions_translation_end(), convex_regions_translation_init(), convex_regions_union_over_range(), db_get_cumulated_in_effects_func, db_get_in_effects_func, db_get_invariant_in_effects_func, db_get_invariant_rw_effects_func, db_get_out_effects_func, db_get_proper_rw_effects_func, db_get_rw_effects_func, db_get_summary_in_effects_func, db_get_summary_out_effects_func, db_get_summary_rw_effects_func, db_get_useful_variables_effects_func, db_put_cumulated_in_effects_func, db_put_in_effects_func, db_put_invariant_in_effects_func, db_put_invariant_rw_effects_func, db_put_out_effects_func, db_put_proper_rw_effects_func, db_put_rw_effects_func, db_put_summary_in_effects_func, db_put_summary_out_effects_func, db_put_summary_rw_effects_func, db_put_useful_variables_effects_func, effect_add_expression_dimension_func, effect_change_ith_dimension_expression_func, effect_consistent_p_func, effect_descriptor_interprocedural_translation_op, effect_dup_func, effect_free_func, effect_nop(), effect_to_store_independent_effect_list_func, effect_union_op, effects_computation_init_func, effects_computation_reset_func, effects_descriptor_normalize_func, effects_descriptors_variable_change_func, effects_inf_difference_op, effects_intersection_op, effects_local_to_global_translation_op, effects_loop_normalize_func, effects_precondition_composition_op, effects_sup_difference_op, effects_test_union_op, effects_transformer_composition_op, effects_transformer_inverse_composition_op, effects_translation_end_func, effects_translation_init_func, effects_union_op, effects_union_over_range_op, empty_context_test, empty_convex_context_p(), fortran_effects_backward_translation_op, fortran_effects_forward_translation_op, init_convex_rw_regions(), load_completed_statement_transformer(), load_completed_transformer_func, load_context_func, load_statement_precondition(), load_statement_transformer(), load_transformer_func, loop_convex_descriptor_make(), loop_descriptor_make_func, loop_range_in_effect_func, proper_to_summary_effect_func, reference_to_convex_region(), reference_to_effect_func, region_consistent_p(), region_dup(), region_free(), region_to_store_independent_region_list(), regions_dynamic_elim(), regions_must_convex_hull(), RegionsInfDifference(), RegionsIntersection(), RegionsMayUnion(), RegionsMustUnion(), RegionsSupDifference(), reset_convex_rw_regions(), set_contracted_proper_effects(), set_descriptor_range_p(), statement_strongly_feasible_p(), stmt_strongly_feasible_p_func, vector_to_convex_descriptor(), and vector_to_descriptor_func.

+ Here is the call graph for this function: