PIPS
methods.c
Go to the documentation of this file.
1 /*
2 
3  $Id: methods.c 23065 2016-03-02 09:05:50Z coelho $
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 /* package simple effects : Be'atrice Creusillet 5/97
28  *
29  * File: methods.c
30  * ~~~~~~~~~~~~~~~
31  *
32  * This File contains the intanciation of the generic functions necessary
33  * for the computation of all types of simple effects.
34  *
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 "ri-util.h"
47 #include "effects-util.h"
48 #include "database.h"
49 #include "resources.h"
50 #include "pipsdbm.h"
51 
52 #include "effects-generic.h"
53 #include "effects-simple.h"
54 #include "misc.h"
55 
56 /******************************************************* PIPSDBM INTERFACES */
57 
58 /* The macros DB_GETNOPUT_xxx lead all to a gcc warning: unused
59  * parameter ‘m’
60  */
61 
62 DB_GETPUT_SE(proper_references, PROPER_REFERENCES)
63 DB_GETNOPUT_LS(summary_references, SUMMARY_EFFECTS)
64 DB_GETPUT_SE(cumulated_references, CUMULATED_REFERENCES)
65 DB_GETNOPUT_SE(invariant_references, CUMULATED_REFERENCES)
66 
67 DB_GETPUT_SE(simple_proper_rw_pointer_effects, PROPER_POINTER_EFFECTS)
68 DB_GETNOPUT_SE(simple_invariant_rw_pointer_effects, CUMULATED_POINTER_EFFECTS)
69 DB_GETPUT_SE(simple_rw_pointer_effects, CUMULATED_POINTER_EFFECTS)
70 DB_GETPUT_LS(simple_summary_rw_pointer_effects, SUMMARY_POINTER_EFFECTS)
71 
72 DB_GETPUT_SE(simple_proper_rw_effects, PROPER_EFFECTS)
73 DB_GETNOPUT_SE(simple_invariant_rw_effects, CUMULATED_EFFECTS)
74 DB_GETPUT_SE(simple_rw_effects, CUMULATED_EFFECTS)
75 DB_GETPUT_LS(simple_summary_rw_effects, SUMMARY_EFFECTS)
76 
77 DB_GETPUT_SE(simple_in_effects, IN_EFFECTS)
78 DB_GETPUT_SE(simple_out_effects, OUT_EFFECTS)
79 DB_GETPUT_SE(simple_cumulated_in_effects, CUMULATED_IN_EFFECTS)
80 DB_GET_SE(simple_invariant_in_effects, IN_EFFECTS)
81 DB_NOPUT_SE(simple_invariant_in_effects)
82 DB_GETPUT_LS(simple_summary_in_effects, IN_SUMMARY_EFFECTS)
83 DB_GETPUT_LS(simple_summary_out_effects, OUT_SUMMARY_EFFECTS)
84 
85 DB_GETPUT_SE(simple_live_in_paths, LIVE_IN_PATHS)
86 DB_GETPUT_SE(simple_live_out_paths, LIVE_OUT_PATHS)
87 DB_GETPUT_LS(simple_live_in_summary_paths, LIVE_IN_SUMMARY_PATHS)
88 DB_GETPUT_LS(simple_live_out_summary_paths, LIVE_OUT_SUMMARY_PATHS)
89 
90 // Bug when deleting obsolete resources for a resource never use
91 // look in function check_physical_resource_up_to_date?
92 // DB_GETPUT_EE(simple_useful_variables_effects, USEFUL_VARIABLES_EFFECTS)
93 static entity_effects db_get_null(_UNUSED_ const char * unused)
94 {
95  pips_debug(7, "No resource to load\n");
97 }
98 
99 static void db_put_null(
100  _UNUSED_ const char * unused1,
101  _UNUSED_ entity_effects unused2) {
102  pips_debug(7, "No resource to store\n");
103  return;
104 }
105 
106 // FC: I do not know where to put this one...
107 static void simple_in_effect_loop_range_fix(
108  loop l, list *gin,
110  entity *pi, range r)
111 {
112  // short version for hopeless loops
113  if (! normalizable_and_linear_loop_p(*pi, r)) {
114  pips_debug(7, "non linear loop range.\n");
116  }
117  else if (loop_executed_never_p(l)) {
118  gen_full_free_list(*gin);
119  *gin = NIL;
120  }
121  else if (!loop_executed_at_least_once_p(l))
123  // else gin is still valid because store independent
124 }
125 
126 void
128 {
129 
133 
136 
144 
145  /* FI: no longer good with conditional expressions? Should we use
146  EffectsMustUnion or ReferenceMustUnion? Does not seem to have
147  an impact... */
148  //effects_union_op = effects_undefined_binary_operator;
149  //effects_test_union_op = effects_undefined_binary_operator;
155 
162 
164 
168  loop_range_in_effect_func = simple_in_effect_loop_range_fix;
169 
173 
177 
185 
190 
192 
194 
195  db_get_summary_rw_effects_func = db_get_summary_references;
196 
197  db_get_proper_rw_effects_func = db_get_proper_references;
198  db_put_proper_rw_effects_func = db_put_proper_references;
199 
201  set_descriptor_range_p(false);
203 
205 }
206 
207 
208 void
210 {
214 
217 
225 
226  /* effect_union_op = ; *//* ??? */
234  /* FC: effects_undefined_composition_with_transformer; */
239 
241 
245  loop_range_in_effect_func = simple_in_effect_loop_range_fix;
246 
249  /* FC was: effects_undefined_union_over_range */
250 
252 
253 
257 
265 
270 
272 
274 
275  db_get_summary_rw_effects_func = db_get_summary_references;
276  db_put_summary_rw_effects_func = db_put_summary_references;
277 
278  db_get_proper_rw_effects_func = db_get_proper_references;
279  db_put_proper_rw_effects_func = db_put_proper_references;
280 
281  db_get_invariant_rw_effects_func = db_get_invariant_references;
282  db_put_invariant_rw_effects_func = db_put_invariant_references;
283 
284  db_get_rw_effects_func = db_get_cumulated_references;
285  db_put_rw_effects_func = db_put_cumulated_references;
286 
289 
290  /* FC: rm set_contracted_proper_effects(!PROPER_EFFECTS_CONTRACT); */
292  set_descriptor_range_p(false);
294 
296 }
297 
298 
299 void
301 {
305 
308 
316 
329 
331 
335  loop_range_in_effect_func = simple_in_effect_loop_range_fix;
339 
343 
351 
356 
358 
360 
361 
362  db_get_proper_rw_effects_func = db_get_simple_proper_rw_pointer_effects;
363  db_put_proper_rw_effects_func = db_put_simple_proper_rw_pointer_effects;
364  db_get_summary_rw_effects_func = db_get_simple_summary_rw_pointer_effects;
365 
367  set_descriptor_range_p(false);
369 
371 }
372 
373 void
375 {
377  db_get_proper_rw_effects_func = db_get_simple_proper_rw_effects;
378  db_put_proper_rw_effects_func = db_put_simple_proper_rw_effects;
379  db_get_summary_rw_effects_func = db_get_simple_summary_rw_effects;
380  if (get_constant_paths_p())
381  {
382  switch (get_pointer_info_kind())
383  {
386  break;
387  case with_points_to:
389  break;
390  case with_pointer_values:
392  break;
393  default:
394  pips_internal_error("unexpected value\n");
395  }
396  }
397 }
398 
399 void
401 {
403  db_get_proper_rw_effects_func = db_get_simple_proper_rw_pointer_effects;
404  db_put_proper_rw_effects_func = db_put_simple_proper_rw_pointer_effects;
405  db_get_summary_rw_effects_func = db_get_simple_summary_rw_pointer_effects;
406  if (get_constant_paths_p())
407  pips_internal_error("constant_paths_p must be false for pointer effects\n");
408 
409 }
410 
411 void
413 {
417 
420 
428 
441 
443  if (get_constant_paths_p())
444  {
445  switch (get_pointer_info_kind())
446  {
449  break;
450  case with_points_to:
452  break;
453  case with_pointer_values:
455  break;
456  default:
457  pips_internal_error("unexpected value\n");
458  }
459  }
460 
464  loop_range_in_effect_func = simple_in_effect_loop_range_fix;
468 
469 
473 
480 
482 
488 
490 
491 
492  db_get_proper_rw_effects_func = db_get_simple_proper_rw_effects;
493  db_put_proper_rw_effects_func = db_put_simple_proper_rw_effects;
494 
495  db_get_invariant_rw_effects_func = db_get_simple_invariant_rw_effects;
496  db_put_invariant_rw_effects_func = db_put_simple_invariant_rw_effects;
497 
498  db_get_rw_effects_func = db_get_simple_rw_effects;
499  db_put_rw_effects_func = db_put_simple_rw_effects;
500 
501  db_get_summary_rw_effects_func = db_get_simple_summary_rw_effects;
502  db_put_summary_rw_effects_func = db_put_simple_summary_rw_effects;
503 
504  db_get_in_effects_func = db_get_simple_in_effects;
505  db_put_in_effects_func = db_put_simple_in_effects;
506 
507  db_get_out_effects_func = db_get_simple_out_effects;
508  db_put_out_effects_func = db_put_simple_out_effects;
509 
510  db_get_cumulated_in_effects_func = db_get_simple_cumulated_in_effects;
511  db_put_cumulated_in_effects_func = db_put_simple_cumulated_in_effects;
512 
513  db_get_invariant_in_effects_func = db_get_simple_invariant_in_effects;
514  db_put_invariant_in_effects_func = db_put_simple_invariant_in_effects;
515 
516  db_get_summary_in_effects_func = db_get_simple_summary_in_effects;
517  db_put_summary_in_effects_func = db_put_simple_summary_in_effects;
518 
519  db_get_summary_out_effects_func = db_get_simple_summary_out_effects;
520  db_put_summary_out_effects_func = db_put_simple_summary_out_effects;
521 
524 
526  set_descriptor_range_p(false);
528 
530 }
531 
532 void
534 {
538 
541 
549 
562 
566  loop_range_in_effect_func = simple_in_effect_loop_range_fix;
570 
572  if (get_constant_paths_p())
573  pips_internal_error("constant_paths_p must be false for pointer effects\n");
574 
578 
585 
587 
593 
595 
596  db_get_proper_rw_effects_func = db_get_simple_proper_rw_pointer_effects;
597  db_put_proper_rw_effects_func = db_put_simple_proper_rw_pointer_effects;
598 
599  db_get_invariant_rw_effects_func = db_get_simple_invariant_rw_pointer_effects;
600  db_put_invariant_rw_effects_func = db_put_simple_invariant_rw_pointer_effects;
601 
602  db_get_rw_effects_func = db_get_simple_rw_pointer_effects;
603  db_put_rw_effects_func = db_put_simple_rw_pointer_effects;
604 
605  db_get_summary_rw_effects_func = db_get_simple_summary_rw_pointer_effects;
606  db_put_summary_rw_effects_func = db_put_simple_summary_rw_pointer_effects;
607 
608  db_get_in_effects_func = db_get_simple_in_effects;
609  db_put_in_effects_func = db_put_simple_in_effects;
610 
611  db_get_out_effects_func = db_get_simple_out_effects;
612  db_put_out_effects_func = db_put_simple_out_effects;
613 
614  db_get_cumulated_in_effects_func = db_get_simple_cumulated_in_effects;
615  db_put_cumulated_in_effects_func = db_put_simple_cumulated_in_effects;
616 
617  db_get_invariant_in_effects_func = db_get_simple_invariant_in_effects;
618  db_put_invariant_in_effects_func = db_put_simple_invariant_in_effects;
619 
620  db_get_summary_in_effects_func = db_get_simple_summary_in_effects;
621  db_put_summary_in_effects_func = db_put_simple_summary_in_effects;
622 
623  db_get_summary_out_effects_func = db_get_simple_summary_out_effects;
624  db_put_summary_out_effects_func = db_put_simple_summary_out_effects;
625 
628 
630  set_descriptor_range_p(false);
632 
634 }
635 
636 
637 void set_methods_for_inout_effects(const char* module_name __attribute__ ((unused)))
638 {
640 
641  /* for intermediate values ??? FC 15/05/2002
642  * I'm not really sure it is actually useful for simple effects...
643  */
644  /*
645  set_current_module_entity(module_name_to_entity(module_name));
646  set_current_module_statement((statement)
647  db_get_memory_resource(DBR_CODE, module_name, true) );
648 
649  set_cumulated_rw_effects((statement_effects)
650  db_get_memory_resource(DBR_CUMULATED_EFFECTS, module_name, true));
651 
652  module_to_value_mappings(module_name_to_entity(module_name));
653 
654  reset_current_module_entity();
655  reset_current_module_statement();
656  */
657 }
658 
659 void set_methods_for_live_paths(const char* module_name __attribute__ ((unused)))
660 {
662 
663  db_get_live_in_paths_func = db_get_simple_live_in_paths;
664  db_put_live_in_paths_func = db_put_simple_live_in_paths;
665 
666  db_get_live_out_paths_func = db_get_simple_live_out_paths;
667  db_put_live_out_paths_func = db_put_simple_live_out_paths;
668 
669  db_get_live_in_summary_paths_func = db_get_simple_live_in_summary_paths;
670  db_put_live_in_summary_paths_func = db_put_simple_live_in_summary_paths;
671 
672  db_get_live_out_summary_paths_func = db_get_simple_live_out_summary_paths;
673  db_put_live_out_summary_paths_func = db_put_simple_live_out_summary_paths;
674 }
675 
677 {
678  /*
679  reset_cumulated_rw_effects();
680  free_value_mappings();
681  */
682 }
683 
684 
686 {
691 }
692 
694 {
699 }
700 
702 {
703  set_action_interpretation(ACTION_LIVE_IN, ACTION_WRITE);/* Live paths are read paths */
707 }
708 
710 {
711  set_action_interpretation(ACTION_LIVE_OUT, ACTION_WRITE);/* Live paths are read paths */
715 }
716 
717 
718 
719 
721 {
723  effect_prettyprint_func = (void (*) (effect)) abort;
726 }
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_effect(effect p)
Definition: effects.c:451
bool effect_consistent_p(effect p)
Definition: effects.c:457
effect copy_effect(effect p)
EFFECT.
Definition: effects.c:448
struct _newgen_struct_effect_ * effect
Definition: dg.h:21
#define DB_GETPUT_LS(name, NAME)
#define ACTION_WRITE
#define DB_GETNOPUT_SE(name, NAME)
#define ACTION_IN
#define ACTION_OUT
#define ACTION_READ
void(* generic_prettyprint_function)(list)
#define DB_GETNOPUT_LS(name, NAME)
#define DB_NOPUT_SE(name)
#define DB_GETPUT_SE(name, NAME)
@ with_points_to
@ with_no_pointer_info
@ with_pointer_values
#define DB_GET_SE(name, NAME)
for db_* functions
text(* generic_text_function)(list)
prettyprint function types:
#define ACTION_LIVE_IN
#define ACTION_LIVE_OUT
transformer load_undefined_transformer(statement)
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)
descriptor effects_undefined_vector_to_descriptor(Pvecteur)
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)
list effects_descriptors_variable_change_nop(list, entity, entity)
effect effect_nop(effect)
void set_contracted_rw_effects(bool)
rw_effects_engine.c
list(* c_effects_on_formal_parameter_backward_translation_func)(list, expression, transformer)
transformer(* load_context_func)(statement)
statement_effects(* db_get_live_in_paths_func)(const char *)
list effects_composition_with_preconditions_nop(list, transformer, bool)
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)
list effects_undefined_descriptors_variable_change(list, entity, entity)
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)
statement_effects(* db_get_live_out_paths_func)(const char *)
list effects_composition_with_transformer_nop(list, transformer)
descriptor(* loop_descriptor_make_func)(loop)
void(* effect_free_func)(effect eff)
list(* effects_local_to_global_translation_op)(list)
list effects_union_over_range_nop(list, entity, range, descriptor)
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 *)
descriptor loop_undefined_descriptor_make(loop)
void(* db_put_out_effects_func)(const char *, statement_effects)
void effects_computation_no_init(const char *)
void set_descriptor_range_p(bool)
void(* db_put_live_out_paths_func)(const char *, statement_effects)
void(* effects_computation_init_func)(const char *)
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 *)
void(* db_put_live_in_summary_paths_func)(const char *, list)
statement_effects(* db_get_cumulated_in_effects_func)(const char *)
void(* db_put_live_out_summary_paths_func)(const char *, list)
list(* effects_test_union_op)(list, list, bool(*eff1_eff2_combinable_p)(effect, effect))
void(* effects_translation_init_func)(entity, list, bool)
void set_action_interpretation(string, string)
prettyprint.c
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_undefined_loop_normalize(list, entity, range, entity *, descriptor, bool)
list effects_undefined_composition_with_transformer(list, transformer)
list(* effects_descriptors_variable_change_func)(list, entity, entity)
list(* db_get_live_out_summary_paths_func)(const char *)
list effects_undefined_binary_operator(list, list, bool(*)(effect, effect))
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)
list effects_loop_normalize_nop(list, entity, range, entity *, descriptor, bool)
list(* db_get_live_in_summary_paths_func)(const char *)
void(* effects_computation_reset_func)(const char *)
void(* db_put_cumulated_in_effects_func)(const char *, statement_effects)
bool empty_context_test_false(transformer)
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 *)
transformer load_undefined_context(statement)
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)
void effects_computation_no_reset(const char *)
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(* db_put_live_in_paths_func)(const char *, statement_effects)
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)
list EffectsMustUnion(list l1, list l2, bool(*union_combinable_p)(effect, effect))
list EffectsMustUnion(list l1, list l2, union_combinable_p) input : two lists of effects output : a l...
list EffectsMayUnion(list l1, list l2, bool(*union_combinable_p)(effect, effect))
list EffectsMayUnion(list l1, list l2, union_combinable_p) input : two lists of effects output : a li...
list ReferenceTestUnion(list l1, list l2, bool(*union_combinable_p)(effect, effect) __attribute__((unused)))
list ReferenceUnion(list l1, list l2, bool(*union_combinable_p)(effect, effect) __attribute__((unused)))
package effect: new version by Beatrice Creusillet
list ProperEffectsMustUnion(list l1, list l2, bool(*union_combinable_p)(effect, effect))
list EffectsMustUnion(list l1, list l2, union_combinable_p) input : two lists of effects output : a l...
list EffectsInfDifference(list l1, list l2, bool(*difference_combinable_p)(effect, effect))
list EffectsInfDifference(list l1, l2) input : two lists of effects output : a list of effect,...
list EffectsSupDifference(list l1, list l2, bool(*difference_combinable_p)(effect, effect))
list EffectsSupDifference(list l1, l2) input : two lists of effects output : a list of effect,...
effect effect_must_union(effect eff1, effect eff2)
computes the must union of two combinable effects
effect proper_to_summary_simple_effect(effect eff)
FI: the goal is to get rid of array subscripts to handle the arrays atomically.
effect reference_to_reference_effect(reference, action, bool)
void reset_methods_for_inout_effects(void)
text simple_inout_effects_to_text(list)
void set_methods_for_proper_simple_effects(void)
list effect_to_store_independent_sdfi_list(effect, bool)
bool proper_references(const string)
void simple_effect_descriptor_interprocedural_translation(effect)
void set_methods_for_inout_effects(const char *)
text simple_rw_effects_to_text(list)
prettyprint.c
list simple_effect_to_constant_path_effects_with_points_to(effect)
Definition: eval.c:343
void simple_effects_descriptor_normalize(list)
void set_methods_for_proper_simple_pointer_effects(void)
list c_simple_effects_on_formal_parameter_backward_translation(list, expression, transformer)
void simple_effect_change_ith_dimension_expression(effect, expression, int)
void simple_effect_add_expression_dimension(effect, expression)
list simple_effect_to_constant_path_effects_with_pointer_values(effect)
Definition: eval.c:206
list effects_dynamic_elim(list)
void simple_effects_translation_init(entity, list, bool)
interprocedural.c
list c_simple_effects_on_actual_parameter_forward_translation(entity, expression, entity, list, transformer)
void set_methods_for_proper_references(void)
methods.c
effect reference_to_simple_effect(reference, action, bool)
unary_operators.c
void set_default_methods_for_proper_simple_effects(void)
void set_methods_for_live_in_paths_prettyprint(const char *)
void set_methods_for_simple_pointer_effects(void)
list simple_effects_backward_translation(entity, list, list, transformer)
text simple_live_out_paths_to_text(list)
void reset_methods_for_effects_prettyprint(const char *)
effect simple_effect_dup(effect)
void set_methods_for_cumulated_references(void)
void set_methods_for_simple_effects(void)
text simple_live_in_paths_to_text(list)
list eval_simple_cell_with_points_to(cell, descriptor, list, bool *, transformer)
bool cumulated_references(const string)
interface.c
void set_methods_for_live_paths(const char *)
list simple_effects_composition_with_effect_transformer(list, transformer)
list simple_effects_union_over_range(list, entity, range, descriptor)
void set_methods_for_live_out_paths_prettyprint(const char *)
list simple_effects_forward_translation(entity, list, list, transformer)
void set_methods_for_rw_effects_prettyprint(const char *)
void simple_effects_translation_end(void)
void set_methods_for_inout_effects_prettyprint(const char *)
#define entity_effects_undefined
Definition: effects.h:720
const char * module_name(const char *s)
Return the module part of an entity name.
Definition: entity_names.c:296
void gen_full_free_list(list l)
Definition: genClib.c:1023
bool loop_executed_never_p(loop l)
Check if loop bound are constant and then if upper < lower.
Definition: loop.c:971
bool loop_executed_at_least_once_p(loop l)
Check if loop bound are constant and then if upper >= lower.
Definition: loop.c:937
#define NIL
The empty list (nil in Lisp)
Definition: newgen_list.h:47
#define _UNUSED_
Definition: misc-local.h:232
#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 string_undefined
Definition: newgen_types.h:40
#define print_effect(e)
Definition: print.c:336
#define print_effects(e)
Definition: print.c:334
The structure used to build lists in NewGen.
Definition: newgen_list.h:41