25 #include "pips_config.h"
54 #include "constants.h"
123 filename =
"umust_op_stat";
125 mod_name,
".",
prefix, filename, NULL));
144 filename =
"umay_op_stat";
146 mod_name,
".",
prefix, filename, NULL));
163 filename =
"dsup_op_stat";
165 mod_name,
".",
prefix, filename, NULL));
182 filename =
"dinf_op_stat";
184 mod_name,
".",
prefix, filename, NULL));
212 debug(3,
"RegionsMayUnion",
"begin\n");
217 debug(3,
"RegionsMayUnion",
"end\n");
233 debug(3,
"RegionsMustUnion",
"begin\n");
238 debug(3,
"RegionsMustUnion",
"end\n");
255 debug(3,
"RegionsIntersection",
"begin\n");
257 intersection_combinable_p,
261 debug(3,
"RegionsIntersection",
"end\n");
288 intersection_combinable_p,
310 debug(3,
"RegionsSupDifference",
"begin\n");
317 difference_combinable_p,
320 debug(3,
"RegionsSupDifference",
"end\n");
339 debug(3,
"RegionsInfDifference",
"begin\n");
346 difference_combinable_p,
348 debug(3,
"RegionsInfDifference",
"end\n");
372 debug(3,
"RegionsEntitiesInfDifference",
"begin\n");
379 difference_combinable_p,
381 debug(3,
"RegionsEntitiesInfDifference",
"end\n");
478 r_res = (*effect_dup_func)(r1);
485 r_res = (*effect_dup_func)(r2);
553 !(SC_UNDEFINED_P(
s1) || SC_UNDEFINED_P(s2)));
625 sc_dimension(s2) = sc_dimension(
s1);
637 pips_debug(8,
"compute the convex hull...\n");
649 pips_debug(8,
"after redundancy elimination:\n");
666 pips_debug(1,
"sr sc_rn (maybe due to an overflow error)\n");
819 pips_assert(
"r1 and r2 refers to the same variable",
835 !(SC_UNDEFINED_P(
s1) || SC_UNDEFINED_P(s2)));
914 pips_debug(1,
"sr sc_rn (maybe due to an overflow error)\n");
1022 bool concrete_locations_p =
true;
1029 if (c1_abstract_location_p || c2_abstract_location_p)
1036 if (heap1_context_sensitive_p && heap2_context_sensitive_p)
1038 concrete_locations_p =
true;
1044 concrete_locations_p =
false;
1048 if (concrete_locations_p)
1120 region reg = (*effect_dup_func)(reg2);
1132 region reg = (*effect_dup_func)(reg1);
1142 bool feasible =
true;
1208 bool concrete_locations_p =
true;
1215 if (c1_abstract_location_p || c2_abstract_location_p)
1222 if (heap1_context_sensitive_p && heap2_context_sensitive_p)
1224 concrete_locations_p =
true;
1228 concrete_locations_p =
false;
1234 if (concrete_locations_p)
1304 reg = (*effect_dup_func)(r2);
1318 tag app,
bool super_or_sub);
1340 volatile tag app = -1;
1349 fprintf(stderr,
"\t reg1 :\n");
1351 fprintf(stderr,
"\t reg2 :\n");
1366 reg = (*effect_dup_func)(reg1);
1432 (disjonction, reg1, app,
SUPER);
1500 fprintf(stderr,
"\t l_reg :\n");
1527 fprintf(stderr,
"\t reg1 :\n");
1529 fprintf(stderr,
"\t reg2 :\n");
1589 fprintf(stderr,
"\t l_res :\n");
1612 ps_res = disjonction->
psys;
1616 if (disjonction->
succ != NULL)
1622 for(disj_tmp = disjonction->
succ;
1624 disj_tmp = disj_tmp->
succ)
1629 chemin =
pa_make(ps_res,disjonction);
1631 disjonction =
dj_free(disjonction);
1632 chemin->
pcomp = disjonction;
1639 disjonction =
dj_free1(disjonction);
float a2sf[2] __attribute__((aligned(16)))
USER generates a user error (i.e., non fatal) by printing the given MSG according to the FMT.
action copy_action(action p)
ACTION.
bool effect_consistent_p(effect p)
approximation make_approximation(enum approximation_utype tag, void *val)
effect copy_effect(effect p)
EFFECT.
reference make_reference(entity a1, list a2)
reference copy_reference(reference p)
REFERENCE.
bool entity_flow_or_context_sentitive_heap_location_p(entity e)
entity abstract_locations_max(entity al1, entity al2)
eturns the smallest abstract location set greater than or equalt to al1 and al2.
entity entity_locations_max(entity al1, entity al2)
Here, entity al1 and entity al2 can be program variables.
Pbase base_union(Pbase b1, Pbase b2)
Pbase base_union(Pbase b1, Pbase b2): compute a new basis containing all elements of b1 and all eleme...
void sc_syst_debug(Psysteme s)
constraint_to_text.c
Pdisjunct dj_free(Pdisjunct in_dj)
Pdisjunct dj_free( (Pdisjunct) in_dj ) AL 31/05/94 w - 1 depth free of input disjunction.
Pdisjunct dj_free1(Pdisjunct in_dj)
Pdisjunct dj_free1( (Pdisjunct) in_dj ) AL 31/05/94 1st depth free of input disjunction.
#define region_any_reference(reg)
To be avoided.
#define region_action(reg)
#define debug_region_consistency(reg)
#define region_system_(reg)
#define region_system(reg)
#define region_empty_p(reg)
#define region_approximation_tag(reg)
#define region
simulation of the type region
list region_sup_difference(region reg1, region reg2)
list region_sup_difference(effect reg1, reg2) input : two regions output : a list of regions containi...
list region_entities_intersection(region r1, region r2)
list region_entities_intersection(region reg1, reg2) input : two regions output : a mere copy of the ...
bool convex_cells_intersection_p(cell c1, descriptor d1, cell c2, descriptor d2, bool *exact_p)
static int nb_umust_must_may
list region_must_union(region r1, region r2)
computes the must union of two combinable array regions
static list disjunction_to_list_of_regions(Pdisjunct disjonction, effect reg, tag app, bool super_or_sub)
3- Difference :
static effect regions_may_convex_hull(region f1, region f2)
static effect regions_may_convex_hull(region r1,r2) input : two "effect" representing two regions.
static int nb_umust_must_may_must
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 :
void print_dinf_statistics(char *mod_name, char *prefix)
list region_inf_difference(region reg1, region reg2)
list region_inf_difference(region reg1, reg2) input : two regions output : a list of regions containi...
void reset_binary_op_statistics()
binary_operators.c
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...
void print_umay_statistics(char *mod_name, char *prefix)
static int nb_dsup_pot_must
static int nb_umust_must_must_must
static int nb_umust_sc_rn
void print_dsup_statistics(char *mod_name, char *prefix)
list region_intersection(region reg1, region reg2)
Intersection :
void print_umust_statistics(char *mod_name, char *prefix)
static Psysteme region_sc_convex_hull(Psysteme ps1, Psysteme ps2)
tatic Psysteme region_sc_convex_hull(Psysteme ps1, ps2) input : two systems of constraints output : a...
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 region_may_union(region r1, region r2)
computes the may union of two combinable array regions
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,...
static int nb_umust_must_must
list RegionsEntitiesIntersection(list l1, list l2, bool(*intersection_combinable_p)(effect, effect))
list RegionsEntitiesIntersection(list l1,l2, bool (*intersection_combinable_p)(effect,...
list region_union(region r1, region r2, bool must_p)
computes the must or may union of two combinable array regions depending on the value of must_p
list RegionsEntitiesInfDifference(list l1, list l2, bool(*difference_combinable_p)(effect, effect))
list RegionsEntitiesInfDifference(list l1, l2) input : two lists of regions output : a list of region...
static int nb_umay_must_must
bool convex_cells_inclusion_p(cell c1, descriptor d1, cell c2, descriptor d2, bool *exact_p)
Inclusion test :
static Psysteme disjunction_to_region_sc(Pdisjunct disjonction, bool *p_exact)
static Psysteme disjunction_to_region_sc(Pdisjunct disjonction, bool *b) input : a disjunction repres...
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...
static int nb_dinf_pot_must
list region_to_may_region_list(effect)
bool must_regions_p(void)
list region_to_list(effect)
void region_sc_append_and_normalize(effect, Psysteme, int)
effect reference_whole_region(reference, action)
effect region_dup(effect)
Psysteme cell_system_sc_append_and_normalize(Psysteme, Psysteme, int)
bool op_statistics_p(void)
list regions_to_nil_list(effect, effect)
list list_of_effects_generic_sup_difference_op(list, list, bool(*)(effect, effect), list(*)(effect, effect))
list list_of_effects_generic_union_op(list, list, bool(*)(effect, effect), list(*)(effect, effect), list(*)(effect))
effect make_anywhere_effect(action)
list list_of_effects_generic_cells_inf_difference_op(list, list, bool(*)(effect, effect), list(*)(effect, effect))
void effect_to_may_effect(effect)
list list_of_effects_generic_intersection_op(list, list, bool(*)(effect, effect), list(*)(effect, effect))
list list_of_effects_generic_inf_difference_op(list, list, bool(*)(effect, effect), list(*)(effect, effect))
list list_of_effects_generic_cells_intersection_op(list, list, bool(*)(effect, effect), list(*)(effect, effect))
bool cells_combinable_p(cell, cell)
#define effect_approximation_tag(eff)
#define effect_variable(e)
For COMPATIBILITY purpose only - DO NOT USE anymore.
#define make_simple_effect(reference, action, approximation)
action_kind action_to_action_kind(action)
Without the consistency test, this function would certainly be inlined.
tag approximation_and(tag, tag)
tag approximation_and(tag t1, tag t2) input : two approximation tags.
bool effect_abstract_location_p(effect)
entity effect_entity(effect)
cproto-generated files
bool store_effect_p(effect)
tag approximation_or(tag, tag)
tag approximation_or(tag t1, tag t2) input : two approximation tags.
bool anywhere_effect_p(effect)
Is it an anywhere effect? ANYMMODULE:ANYWHERE
bool cell_abstract_location_p(cell)
#define effect_undefined_p(x)
#define approximation_tag(x)
#define action_kind_tag(x)
#define effect_descriptor(x)
#define descriptor_convex(x)
#define descriptor_none_p(x)
#define effect_approximation(x)
#define newgen_Psysteme(p)
FILE * safe_fopen(const char *filename, const char *what)
int safe_fclose(FILE *stream, const char *filename)
#define ENDP(l)
Test if a list is empty.
#define NIL
The empty list (nil in Lisp)
#define CONS(_t_, _i_, _l_)
List element cell constructor (insert an element at the beginning of a list)
#define pips_debug
these macros use the GNU extensions that allow variadic macros, including with an empty list.
#define pips_assert(what, predicate)
common macros, two flavors depending on NDEBUG
#define pips_internal_error
void debug(const int the_expected_debug_level, const char *calling_function_name, const char *a_message_format,...)
ARARGS0.
string concatenate(const char *,...)
Return the concatenation of the given strings.
int f2(int off1, int off2, int w, int n, float r[n], float a[n], float b[n])
Ppath pa_make(Psysteme in_ps, Pcomplist in_pcomp)
Package : C3/union Author : Arnauld LESERVOT (leservot(a)limeil.cea.fr) Date : Modified : 04 04 95 ...
bool pa_feasibility_ofl_ctrl(Ppath in_pa, int ofl_ctrl)
bool pa_feasibility_ofl_ctrl( (Ppath) in_pa, int ofl_ctrl) Returns true if the input path is possib...
Ppath pa_free1(Ppath in_pa)
Ppath pa_free1(Ppath pa) BA, AL 30/05/94 1 depth free.
string db_get_current_workspace_directory(void)
static const char * prefix
Psysteme cute_convex_union(Psysteme s1, Psysteme s2)
debug messages before calling the version in polyedre.
bool same_entity_p(entity e1, entity e2)
predicates on entities
bool sc_rn_p(Psysteme sc)
bool sc_rn_p(Psysteme sc): check if the set associated to sc is the whole space, rn
Psysteme sc_rn(Pbase b)
Psysteme sc_rn(Pbase b): build a Psysteme without constraints to define R^n, where n is b's dimension...
void sc_rm(Psysteme ps)
void sc_rm(Psysteme ps): liberation de l'espace memoire occupe par le systeme de contraintes ps;
bool sc_empty_p(Psysteme sc)
bool sc_empty_p(Psysteme sc): check if the set associated to sc is the constant sc_empty or not.
Psysteme sc_dup(Psysteme ps)
Psysteme sc_dup(Psysteme ps): should becomes a link.
bool sc_integer_feasibility_ofl_ctrl(Psysteme sc, int ofl_ctrl, bool ofl_res)
Value b1
booleen indiquant quel membre est en cours d'analyse
bool sc_intersection_empty_p_ofl(Psysteme ps1, Psysteme ps2)
bool sc_intersection_empty_p_ofl(ps1, ps2) input : two polyhedra output : true if their intersection ...
int fprintf()
test sc_min : ce test s'appelle par : programme fichier1.data fichier2.data ...
Warning! Do not modify this file that is automatically generated!
le type des coefficients dans les vecteurs: Value est defini dans le package arithmetique
The structure used to build lists in NewGen.
#define sc_inclusion_p_ofl(ps1, ps2)
#define sc_inclusion_p(ps1, ps2)
#define sc_convex_hull_equals_union_p_ofl(conv_hull, ps1, ps2)
#define sc_equal_p_ofl(ps1, ps2)
#define sc_difference(ps1, ps2)
FOR BACKWARD COMPATIBILITY.
#define base_dimension(b)
Pbase base_dup(Pbase b)
Pbase base_dup(Pbase b) Note: this function changes the value of the pointer.
Pbase base_copy(Pbase b)
Direct duplication.