PIPS
|
#include <stdio.h>
#include <string.h>
#include "genC.h"
#include "linear.h"
#include "ri.h"
#include "effects.h"
#include "database.h"
#include "boolean.h"
#include "vecteur.h"
#include "contrainte.h"
#include "sc.h"
#include "sommet.h"
#include "ray_dte.h"
#include "sg.h"
#include "polyedre.h"
#include "union.h"
#include "constants.h"
#include "ri-util.h"
#include "prettyprint.h"
#include "effects-util.h"
#include "pipsdbm.h"
#include "misc.h"
#include "text.h"
#include "effects-generic.h"
#include "effects-convex.h"
Go to the source code of this file.
Macros | |
#define | COMBINE 1 |
#define | UNUSED 2 |
#define | SUPER true |
#define | SUB false |
Functions | |
void | reset_binary_op_statistics () |
binary_operators.c More... | |
void | print_umust_statistics (char *mod_name, char *prefix) |
void | print_umay_statistics (char *mod_name, char *prefix) |
void | print_dsup_statistics (char *mod_name, char *prefix) |
void | print_dinf_statistics (char *mod_name, char *prefix) |
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 list of regions, may union of the two initial lists modifies : l1 and l2 and their regions. More... | |
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 list of regions, must union of the two initial lists modifies : l1 and l2 and their regions. More... | |
list | RegionsIntersection (list l1, list l2, bool(*intersection_combinable_p)(effect, effect)) |
list RegionsIntersection(list l1,l2, bool (*intersection_combinable_p)(effect, effect)) input : output : modifies : comment : More... | |
list | RegionsEntitiesIntersection (list l1, list l2, bool(*intersection_combinable_p)(effect, effect)) |
list RegionsEntitiesIntersection(list l1,l2, bool (*intersection_combinable_p)(effect, effect)) input : two lists of regions output : a list of regions containing all the regions of l1 that have a corresponding region (i.e. More... | |
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, representing the sup_difference of the initial regions. More... | |
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, representing the inf_difference of the initial regions. More... | |
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 regions, such that: if there is a region R concerning entity A in l1 and in l2, then R is removed from the result; if there is a region R concerning array A in l1, but not in l2, then it is kept in l1, and in the result. More... | |
effect | regions_must_convex_hull (region f1, region f2) |
1- Union : More... | |
static effect | regions_may_convex_hull (region r1, region r2) |
static effect regions_may_convex_hull(region r1,r2) input : two "effect" representing two regions. More... | |
list | region_must_union (region r1, region r2) |
computes the must union of two combinable array regions More... | |
list | region_may_union (region r1, region r2) |
computes the may union of two combinable array regions More... | |
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 More... | |
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 : another system of constraints representing their convex hull. More... | |
bool | convex_cells_inclusion_p (cell c1, descriptor d1, cell c2, descriptor d2, bool *exact_p) |
Inclusion test : More... | |
list | region_intersection (region reg1, region reg2) |
Intersection : More... | |
bool | convex_cells_intersection_p (cell c1, descriptor d1, cell c2, descriptor d2, bool *exact_p) |
list | region_entities_intersection (region r1, region r2) |
list region_entities_intersection(region reg1, reg2) input : two regions output : a mere copy of the first region. More... | |
static list | disjunction_to_list_of_regions (Pdisjunct disjonction, effect reg, tag app, bool super_or_sub) |
3- Difference : More... | |
list | region_sup_difference (region reg1, region reg2) |
list region_sup_difference(effect reg1, reg2) input : two regions output : a list of regions containing their sup_difference. More... | |
list | region_inf_difference (region reg1, region reg2) |
list region_inf_difference(region reg1, reg2) input : two regions output : a list of regions containing their inf_difference. More... | |
static Psysteme | disjunction_to_region_sc (Pdisjunct disjonction, bool *p_exact) |
static Psysteme disjunction_to_region_sc(Pdisjunct disjonction, bool *b) input : a disjunction representing the union of several Psystemes output : a Psysteme representing the convex_hull of the disjunction of predicates. More... | |
static list | disjunction_to_list_of_regions (Pdisjunct disjonction, region reg, tag app, bool super_or_sub __attribute__((unused))) |
static list disjuction_to_list_of_regions(disjonction, reg, app, super_or_sub) input : a disjunction and a region output : a list of regions which contains a region identical with reg, but for the predicate which is given by the Psystemes of the disjunction and the approximation which depends on the exactness of the representation. More... | |
Variables | |
static int | nb_umust = 0 |
static int | nb_umust_must_must = 0 |
static int | nb_umust_must_must_must = 0 |
static int | nb_umust_must_may = 0 |
static int | nb_umust_must_may_must = 0 |
static int | nb_umust_sc_rn = 0 |
static int | nb_umay = 0 |
static int | nb_umay_must_must = 0 |
static int | nb_umay_must = 0 |
static int | nb_dsup = 0 |
static int | nb_dsup_pot_must = 0 |
static int | nb_dsup_must = 0 |
static int | nb_dinf = 0 |
static int | nb_dinf_pot_must = 0 |
static int | nb_dinf_must = 0 |
#define COMBINE 1 |
Definition at line 65 of file binary_operators.c.
#define SUB false |
Definition at line 69 of file binary_operators.c.
#define SUPER true |
Definition at line 68 of file binary_operators.c.
#define UNUSED 2 |
Definition at line 66 of file binary_operators.c.
bool convex_cells_inclusion_p | ( | cell | c1, |
descriptor | d1, | ||
cell | c2, | ||
descriptor | d2, | ||
bool * | exact_p | ||
) |
Inclusion test :
returns true if c1 is included into c2, false otherwise. returns false if c1 may only be included into c2.
exact_p | target is set to true if the result is exact, false otherwise. |
In fact, this parameter would be useful only if there are overflows during the systems inclusion test. But it is not currently used.
default result
we have combinable concrete locations or assimilated (context sensitive heap locations)
they intersect if their descriptors intersection is not empty
if one of the systems is unfeasible, the result is false and exact
if one of the systems is not constrained, the result is true and exact
c1 | 1 |
d1 | 1 |
c2 | 2 |
d2 | 2 |
exact_p | xact_p |
Definition at line 1015 of file binary_operators.c.
References abstract_locations_max(), cell_abstract_location_p(), cell_entity(), cells_combinable_p(), descriptor_convex, entity_flow_or_context_sentitive_heap_location_p(), same_entity_p(), sc_empty_p(), sc_inclusion_p, and sc_rn_p().
Referenced by convex_effect_find_aliased_paths_with_pointer_values().
bool convex_cells_intersection_p | ( | cell | c1, |
descriptor | d1, | ||
cell | c2, | ||
descriptor | d2, | ||
bool * | exact_p | ||
) |
default safe result
can it be true if we have two null locations ?
we have combinable concrete locations or assimilated (context sensitive heap locations)
they intersect if their descriptors intersection is not empty
if one of the systems is unfeasible, the result is false and exact
if one of the systems is not constrained, the result is true and exact
else test the feasibility of the systems intersection
could be some other level?
c1 | 1 |
d1 | 1 |
c2 | 2 |
d2 | 2 |
exact_p | xact_p |
Definition at line 1201 of file binary_operators.c.
References CATCH, cell_abstract_location_p(), cell_entity(), cell_system_sc_append_and_normalize(), cells_combinable_p(), descriptor_convex, entity_flow_or_context_sentitive_heap_location_p(), FWD_OFL_CTRL, overflow_error, pips_debug, sc_dup(), sc_empty_p(), sc_integer_feasibility_ofl_ctrl(), sc_rm(), sc_rn_p(), TRY, and UNCATCH.
Referenced by convex_effect_find_aliased_paths_with_pointer_values().
|
static |
3- Difference :
Referenced by region_inf_difference(), and region_sup_difference().
|
static |
static list disjuction_to_list_of_regions(disjonction, reg, app, super_or_sub) input : a disjunction and a region output : a list of regions which contains a region identical with reg, but for the predicate which is given by the Psystemes of the disjunction and the approximation which depends on the exactness of the representation.
The latter is either a sub or a super approximation of the disjonction, depending on the value of the bool super_or_sub. modifies : the disjunction is freed by the call to disjunction_to_region_sc. comment : app is the tag if the disjunction is exact;
computation of a subapproximation
computation of the exact representation or of a super approximation
build_sc_nredund_2pass(&ps_tmp);
Definition at line 1656 of file binary_operators.c.
References CONS, disjunction_to_region_sc(), EFFECT, is_approximation_exact, is_approximation_may, newgen_Psysteme, NIL, region, region_approximation_tag, region_dup(), region_system, region_system_, sc_empty_p(), sc_rm(), and SUB.
static Psysteme disjunction_to_region_sc(Pdisjunct disjonction, bool *b) input : a disjunction representing the union of several Psystemes output : a Psysteme representing the convex_hull of the disjunction of predicates.
modifies : frees the input disjuntion. comment : Exactness is now tested outside the loop.
no need to compute the hull if there is only one system in the disjunction
Exactness test
do not freee the inner Psysteme: it is the result
Definition at line 1606 of file binary_operators.c.
References dj_free(), dj_free1(), DJ_UNDEFINED, FWD_OFL_CTRL, pa_feasibility_ofl_ctrl(), pa_free1(), pa_make(), Spath::pcomp, pips_assert, Ssyslist::psys, region_sc_convex_hull(), and Ssyslist::succ.
Referenced by disjunction_to_list_of_regions().
void print_dinf_statistics | ( | char * | mod_name, |
char * | prefix | ||
) |
mod_name | od_name |
prefix | refix |
Definition at line 177 of file binary_operators.c.
References concatenate(), db_get_current_workspace_directory(), fprintf(), free(), nb_dinf, nb_dinf_must, nb_dinf_pot_must, prefix, safe_fclose(), safe_fopen(), and strdup().
void print_dsup_statistics | ( | char * | mod_name, |
char * | prefix | ||
) |
mod_name | od_name |
prefix | refix |
Definition at line 158 of file binary_operators.c.
References concatenate(), db_get_current_workspace_directory(), fprintf(), free(), nb_dsup, nb_dsup_must, nb_dsup_pot_must, prefix, safe_fclose(), safe_fopen(), and strdup().
void print_umay_statistics | ( | char * | mod_name, |
char * | prefix | ||
) |
mod_name | od_name |
prefix | refix |
Definition at line 139 of file binary_operators.c.
References concatenate(), db_get_current_workspace_directory(), fprintf(), free(), nb_umay, nb_umay_must, nb_umay_must_must, prefix, safe_fclose(), safe_fopen(), and strdup().
void print_umust_statistics | ( | char * | mod_name, |
char * | prefix | ||
) |
mod_name | od_name |
prefix | refix |
Definition at line 118 of file binary_operators.c.
References concatenate(), db_get_current_workspace_directory(), fprintf(), free(), nb_umust, nb_umust_must_may, nb_umust_must_may_must, nb_umust_must_must, nb_umust_must_must_must, nb_umust_sc_rn, prefix, safe_fclose(), safe_fopen(), and strdup().
list region_entities_intersection(region reg1, reg2) input : two regions output : a mere copy of the first region.
modifies : nothing. comment : We assume that both regions concern the same entity or that one of them is an anywhere effect.
Definition at line 1294 of file binary_operators.c.
References anywhere_effect_p(), CONS, copy_action(), EFFECT, effect_action, NIL, region, and region_dup().
Referenced by RegionsEntitiesIntersection().
list region_inf_difference(region reg1, reg2) input : two regions output : a list of regions containing their inf_difference.
the action of the resulting regions is the action of the first region (reg1). modifies : comment : not debugged because not yet used.
approximation of the resulting region if the difference is exact
particular cases first
nothing minus something (or nothing) = nothing
something minus nothing = something
everything minus everything = nothing
something minus everything = nothing
general case
We cannot compute the under-approximation of the difference: we must assume that it is the empty set
Definition at line 1516 of file binary_operators.c.
References anywhere_effect_p(), CATCH, disjunction_to_list_of_regions(), ENDP, fprintf(), ifdebug, is_approximation_exact, is_approximation_may, nb_dinf, nb_dinf_must, nb_dinf_pot_must, NIL, op_statistics_p(), overflow_error, pips_debug, print_region, print_regions(), region_approximation_tag, region_dup(), region_system, region_to_list(), sc_difference, sc_empty_p(), sc_rn_p(), SUPER, TRY, and UNCATCH.
Referenced by RegionsInfDifference().
Intersection :
list region_intersection(region reg1, reg2) input : two regions output : a list of regions containing their difference. the action of the resulting regions is the action of the first region (reg1). modifies : nothing. comment : not debugged, because not yet used. (funny, FC;-) (still up_to-date ? BC) of region
FI: Standard procedure for memory/store regions
memory leak?
Automatic variables read in a CATCH block need to be declared volatile as specified by the documentation
if one of the regions is unfeasible, return an empty list
else return a list containing a region which predicate is the intersection of the two initial predicates, and which approximation is the "logical" and of the initial approximations.
could be some other level?
FI: extensions for the new action kinds on environment and store. Since they are combinable, reg1==reg2 and hence their intersection is equal to reg1
Definition at line 1096 of file binary_operators.c.
References anywhere_effect_p(), approximation_and(), CATCH, CONS, copy_action(), copy_effect(), debug_region_consistency, EFFECT, FWD_OFL_CTRL, ifdebug, NIL, overflow_error, pips_debug, print_region, print_regions(), region, region_action, region_approximation_tag, region_dup(), region_free(), region_sc_append_and_normalize(), region_system, region_to_list(), sc_empty_p(), sc_integer_feasibility_ofl_ctrl(), store_effect_p(), TRY, and UNCATCH.
Referenced by convex_cell_reference_preceding_p(), RegionsIntersection(), and successor_only_has_rr_conflict_p().
computes the may union of two combinable array regions
[in] | r1 | input array region |
[in] | r2 | input array region |
Definition at line 415 of file binary_operators.c.
References region_union().
Referenced by RegionsMayUnion().
computes the must union of two combinable array regions
[in] | r1 | input array region |
[in] | r2 | input array region |
Definition at line 403 of file binary_operators.c.
References region_union().
Referenced by compute_regions_union(), and RegionsMustUnion().
tatic Psysteme region_sc_convex_hull(Psysteme ps1, ps2) input : two systems of constraints output : another system of constraints representing their convex hull.
modifies : the bases of ps1 and ps2 : they are changed to their union, and reordered. comment : same as transformer_convex_hulls, except for the type of the arguments, and the reordering of the bases.
FI->BC: beware of callers that do not perform simplifications. Observed on Regions/chopped_square24.c where two equalities are encoded as four inequalities because a constant is divided by two. Maybe a function similar to expression_to_transformer should be used to analyze subscript expressions, if it is not already the case.
Definition at line 992 of file binary_operators.c.
References cute_convex_union().
Referenced by disjunction_to_region_sc(), regions_may_convex_hull(), and regions_must_convex_hull().
list region_sup_difference(effect reg1, reg2) input : two regions output : a list of regions containing their sup_difference.
the action of the resulting regions is the action of the first region (reg1). modifies : comment :
This is the traditional case, limited to store/memory regions
Automatic variables read in a CATCH block need to be declared volatile as specified by the documentation
approximation of the resulting regions if the difference is exact
At this point, we are sure that we have array regions
particular cases first
nothing minus (something or nothing) = nothing
something minus nothing = something
everything minus everything = everything (may) for an array and if app2 = may, = nothing otherwise
something minus everything must = nothing
something minus everything may = something may
general case
FI: Here we do need to extend the concept to environment and type declaration effect. I assume that the effect variable is the same, else the difference would be meaningless. If the action_kind is the same, then the difference must be empty, as I hope is the case for scalara variables in the above code. Else r1 is unchanged.
The output list is empty and stays empty
reg1 is not modified by reg2
This also could be considered an internal error
Definition at line 1328 of file binary_operators.c.
References action_kind_tag, action_to_action_kind(), anywhere_effect_p(), approximation_tag, CATCH, CONS, copy_action(), copy_effect(), disjunction_to_list_of_regions(), EFFECT, effect_action, effect_approximation, fprintf(), ifdebug, is_action_kind_store, is_approximation_exact, is_approximation_may, make_anywhere_effect(), nb_dsup, nb_dsup_must, nb_dsup_pot_must, NIL, op_statistics_p(), overflow_error, pips_debug, pips_internal_error, print_region, print_regions(), region, region_approximation_tag, region_dup(), region_system, region_to_list(), region_to_may_region_list(), sc_difference, sc_empty_p(), sc_intersection_empty_p_ofl(), sc_rn_p(), store_effect_p(), SUPER, TRY, and UNCATCH.
Referenced by array_must_fully_written_by_regions_p(), convex_cell_reference_preceding_p(), and RegionsSupDifference().
computes the must or may union of two combinable array regions depending on the value of must_p
[in] | r1 | input array region |
[in] | r2 | input array region |
[in] | must_p | bool to control the must/may behavior of the function |
Abstract locations cases
In fact, we could have : if (al1_p || al_2_p) { entity e1 = effect_entity(e1); entity e2 = effect_entity(e2); new_ent = entity_locations_max(e1, e2);
eff = make_simple_effect(make_reference(new_ent, NIL), copy_action(effect_action(eff1)), make_approximation(approximation_and(app1,app2), UU)); }
but entity_locations_max involves string manipulations, which are always costly. So we treat apart the cases where (al1_p and ! al2_p) and (al2_p and ! al1_p) because we already know that the abstract location is the max of both locations (because they are combinable (see effects_combinable_p))
concrete locations cases
Definition at line 429 of file binary_operators.c.
References approximation_and(), approximation_or(), copy_action(), copy_effect(), debug_region_consistency, effect_abstract_location_p(), effect_action, effect_approximation_tag, effect_entity(), effect_undefined, effect_undefined_p, entity_locations_max(), make_approximation(), make_reference(), make_simple_effect, NIL, pips_assert, region_empty_p, region_free(), region_to_list(), regions_may_convex_hull(), regions_must_convex_hull(), store_effect_p(), and UU.
Referenced by region_may_union(), and region_must_union().
static effect regions_may_convex_hull(region r1,r2) input : two "effect" representing two regions.
output : an effect, which predicate is the convex hull of the predicates of the initial regions, and which approximation is function of the approximations of the original regions and, in some cases, of the relations between the two initial predicates. modifies : the basis of the predicates of r1 and r2 comment : always computes the convex hull, even if it leads to a may approximation.
region is a renaming of effect
result
Consistency check on regions for action kinds environment and type declaration which should be put in a specific function to enlarge region consistency checks.
sc_empty : no part of the array is accessed
sc_rn : the entire array is accessed
otherwise, we have to compute the convex-hull of the two predicates
if we want to preserve must approximations, then we must find the approximation of the resulting region ; it may depend on the approximations of the initial regions, on the precision (must union or may union), and on the relations between the two initial systems of constraints
we return a whole array region
U_may(must,must)
si s1 == s2 (ie repre'sentent le me^me ensemble) alors must sinon may
Definition at line 796 of file binary_operators.c.
References action_kind_tag, action_tag, action_to_action_kind(), approximation_and(), copy_effect(), copy_reference(), descriptor_none_p, effect_action, effect_descriptor, effect_to_may_effect(), effect_variable, ifdebug, is_approximation_exact, is_approximation_may, must_regions_p(), nb_umay, nb_umay_must, nb_umay_must_must, newgen_Psysteme, op_statistics_p(), pips_assert, pips_debug, print_region, reference_whole_region(), region, region_action, region_any_reference, region_approximation_tag, region_dup(), region_sc_convex_hull(), region_system, region_system_, s1, sc_dup(), sc_empty_p(), sc_equal_p_ofl, sc_rm(), sc_rn_p(), sc_syst_debug(), and store_effect_p().
Referenced by region_union().
1- Union :
static effect regions_must_convex_hull(r1,r2) input : two "effect" representing two regions.
output : an effect, which predicate is the convex hull of the predicates of the initial regions, and which approximation is function of of the approximations of the original regions and, in some cases, of the relations between the two initial predicates. modifies : the basis of the predicates of r1 and r2 comment : always computes the convex hull, even if it leads to a may approximation.
FI: extension to support non-store effects without predicates
result
proper_effects_combine() free the arguments of region_sc_convex_hull()
Automatic variables read in a CATCH block need to be declared volatile as specified by the documentation
sc_empty : no part of the array is accessed
sc_rn : the entire array is accessed
otherwise, we have to compute the convex-hull of the two predicates
to avoid problems in case of overflow error
if we want to preserve must approximations, then we must find the approximation of the resulting region ; it may depend on the approximations of the initial regions, and on the relations between the two initial systems of constraints
we return a whole array region
U_must(must, must)
si enveloppe convexe (s1, s2) exacte must sinon may
U_must(must,may)
U_must(may,must)
Definition at line 531 of file binary_operators.c.
References approximation_or(), b1, b2, Ssysteme::base, base_copy(), base_dimension, base_dup(), base_rm, base_union(), CATCH, copy_effect(), debug_region_consistency, effect_consistent_p(), effect_to_may_effect(), ifdebug, is_approximation_exact, is_approximation_may, must_regions_p(), nb_umust, nb_umust_must_may, nb_umust_must_may_must, nb_umust_must_must, nb_umust_must_must_must, nb_umust_sc_rn, newgen_Psysteme, op_statistics_p(), overflow_error, pips_assert, pips_debug, print_region, region, region_approximation_tag, region_dup(), region_sc_convex_hull(), region_system, region_system_, s1, sc_convex_hull_equals_union_p_ofl, sc_dup(), sc_empty_p(), sc_inclusion_p_ofl, sc_rm(), sc_rn(), sc_rn_p(), sc_syst_debug(), store_effect_p(), TRY, and UNCATCH.
Referenced by do_solve_hardware_constraints_on_nb_proc(), do_solve_hardware_constraints_on_volume(), extended_regions_must_convex_hull(), region_union(), set_methods_for_convex_effects(), and set_methods_for_convex_rw_pointer_effects().
list RegionsEntitiesInfDifference | ( | list | l1, |
list | l2, | ||
bool(*)(effect, effect) | difference_combinable_p | ||
) |
list RegionsEntitiesInfDifference(list l1, l2) input : two lists of regions output : a list of regions, such that: if there is a region R concerning entity A in l1 and in l2, then R is removed from the result; if there is a region R concerning array A in l1, but not in l2, then it is kept in l1, and in the result.
modifies : the regions of l2 may be freed. comment : we keep the regions of l1 that are not combinable with those of l2, but we don't keep the regions of l2 that are not combinable with those of l_reg1.
l_res = list_of_effects_generic_binary_op(l1, l2, difference_combinable_p, regions_to_nil_list, region_to_list, region_to_nil_list);
l1 | 1 |
l2 | 2 |
Definition at line 366 of file binary_operators.c.
References debug(), list_of_effects_generic_cells_inf_difference_op(), NIL, and regions_to_nil_list().
Referenced by internal_compute_distribution_context().
list RegionsEntitiesIntersection | ( | list | l1, |
list | l2, | ||
bool(*)(effect, effect) | intersection_combinable_p | ||
) |
list RegionsEntitiesIntersection(list l1,l2, bool (*intersection_combinable_p)(effect, effect)) input : two lists of regions output : a list of regions containing all the regions of l1 that have a corresponding region (i.e.
same entity) in l2. modifies : l1 and l2. comment :
l_res = list_of_effects_generic_binary_op(l1, l2, intersection_combinable_p, region_entities_intersection, region_to_nil_list, region_to_nil_list);
l1 | 1 |
l2 | 2 |
Definition at line 275 of file binary_operators.c.
References list_of_effects_generic_cells_intersection_op(), NIL, pips_debug, and region_entities_intersection().
list RegionsInfDifference(list l1, l2) input : two lists of regions output : a list of region, representing the inf_difference of the initial regions.
modifies : the regions of l2 may be freed. comment : we keep the regions of l1 that are not combinable with those of l2, but we don't keep the regions of l2 that are not combinable with those of l_reg1.
l_res = list_of_effects_generic_binary_op(l1, l2, difference_combinable_p, region_inf_difference, region_to_list, region_to_nil_list);
l1 | 1 |
l2 | 2 |
Definition at line 334 of file binary_operators.c.
References debug(), list_of_effects_generic_inf_difference_op(), NIL, and region_inf_difference().
Referenced by set_methods_for_convex_effects(), and set_methods_for_convex_rw_pointer_effects().
list RegionsIntersection(list l1,l2, bool (*intersection_combinable_p)(effect, effect)) input : output : modifies : comment :
l1 | 1 |
l2 | 2 |
Definition at line 250 of file binary_operators.c.
References debug(), list_of_effects_generic_intersection_op(), NIL, and region_intersection().
Referenced by compute_send_regions(), edge_cost(), edge_cost_polynome(), real_regions_forward_translation(), set_methods_for_convex_effects(), set_methods_for_convex_rw_pointer_effects(), test_dependence_using_regions(), and transfer_regions().
list RegionsMayUnion(list l1, list l2, union_combinable_p) input : two lists of regions output : a list of regions, may union of the two initial lists modifies : l1 and l2 and their regions.
Regions that are not reused in the output list of regions are freed.nothing (no sharing introduced).
l1 | 1 |
l2 | 2 |
Definition at line 207 of file binary_operators.c.
References debug(), list_of_effects_generic_union_op(), region_may_union(), and region_to_may_region_list().
Referenced by set_methods_for_convex_effects(), set_methods_for_convex_rw_pointer_effects(), and update_out_summary_regions_list().
list RegionsMustUnion(list l1, list l2, union_combinable_p) input : two lists of regions output : a list of regions, must union of the two initial lists modifies : l1 and l2 and their regions.
Regions that are not reused in the output list of regions are freed.
l1 | 1 |
l2 | 2 |
Definition at line 228 of file binary_operators.c.
References debug(), list_of_effects_generic_union_op(), region_must_union(), and region_to_list().
Referenced by allocate_task_to_cluster(), c_convex_effects_on_actual_parameter_forward_translation(), common_region_translation(), common_regions_backward_translation(), common_regions_forward_translation(), compute_recv_regions(), MCW(), move_task_to_cluster(), real_regions_forward_translation(), regions_backward_translation(), regions_forward_translation(), set_methods_for_convex_effects(), set_methods_for_convex_rw_pointer_effects(), and used_data().
list RegionsSupDifference(list l1, l2) input : two lists of regions output : a list of region, representing the sup_difference of the initial regions.
modifies : the regions of l2 may be freed. comment : we keep the regions of l1 that are not combinable with those of l2, but we don't keep the regions of l2 that are not combinable with those of l_reg1.
l_res = list_of_effects_generic_binary_op(l1, l2, difference_combinable_p, region_sup_difference, region_to_list, region_to_nil_list);
l1 | 1 |
l2 | 2 |
Definition at line 305 of file binary_operators.c.
References debug(), list_of_effects_generic_sup_difference_op(), NIL, and region_sup_difference().
Referenced by set_methods_for_convex_effects(), and set_methods_for_convex_rw_pointer_effects().
void reset_binary_op_statistics | ( | void | ) |
binary_operators.c
Definition at line 93 of file binary_operators.c.
References nb_dinf, nb_dinf_must, nb_dinf_pot_must, nb_dsup, nb_dsup_must, nb_dsup_pot_must, nb_umay, nb_umay_must, nb_umay_must_must, nb_umust, nb_umust_must_may, nb_umust_must_may_must, nb_umust_must_must, nb_umust_must_must_must, and nb_umust_sc_rn.
|
static |
Definition at line 88 of file binary_operators.c.
Referenced by print_dinf_statistics(), region_inf_difference(), and reset_binary_op_statistics().
|
static |
Definition at line 90 of file binary_operators.c.
Referenced by print_dinf_statistics(), region_inf_difference(), and reset_binary_op_statistics().
|
static |
Definition at line 89 of file binary_operators.c.
Referenced by print_dinf_statistics(), region_inf_difference(), and reset_binary_op_statistics().
|
static |
Definition at line 84 of file binary_operators.c.
Referenced by print_dsup_statistics(), region_sup_difference(), and reset_binary_op_statistics().
|
static |
Definition at line 86 of file binary_operators.c.
Referenced by print_dsup_statistics(), region_sup_difference(), and reset_binary_op_statistics().
|
static |
Definition at line 85 of file binary_operators.c.
Referenced by print_dsup_statistics(), region_sup_difference(), and reset_binary_op_statistics().
|
static |
Definition at line 80 of file binary_operators.c.
Referenced by print_umay_statistics(), regions_may_convex_hull(), and reset_binary_op_statistics().
|
static |
Definition at line 82 of file binary_operators.c.
Referenced by print_umay_statistics(), regions_may_convex_hull(), and reset_binary_op_statistics().
|
static |
Definition at line 81 of file binary_operators.c.
Referenced by print_umay_statistics(), regions_may_convex_hull(), and reset_binary_op_statistics().
|
static |
Definition at line 73 of file binary_operators.c.
Referenced by print_umust_statistics(), regions_must_convex_hull(), and reset_binary_op_statistics().
|
static |
Definition at line 76 of file binary_operators.c.
Referenced by print_umust_statistics(), regions_must_convex_hull(), and reset_binary_op_statistics().
|
static |
Definition at line 77 of file binary_operators.c.
Referenced by print_umust_statistics(), regions_must_convex_hull(), and reset_binary_op_statistics().
|
static |
Definition at line 74 of file binary_operators.c.
Referenced by print_umust_statistics(), regions_must_convex_hull(), and reset_binary_op_statistics().
|
static |
Definition at line 75 of file binary_operators.c.
Referenced by print_umust_statistics(), regions_must_convex_hull(), and reset_binary_op_statistics().
|
static |
Definition at line 78 of file binary_operators.c.
Referenced by print_umust_statistics(), regions_must_convex_hull(), and reset_binary_op_statistics().