26 #include "pips_config.h"
74 pips_debug(8,
"input references r1 : %s, r2: %s \n",
80 && ((r1_path_length < r2_path_length)
81 || (!strict_p && r1_path_length == r2_path_length)))
86 pips_debug(8,
"same entities, and r1 path is shorter than r2 path\n");
87 while (res && !
ENDP(ind1))
113 pips_debug(8,
"end : r1 is %s a predecessor of r2 (%s exact)\n",
114 res ?
"":
"not", *exact_p ?
"":
"not");
158 *output_cell = input_cell;
195 list ptl,
bool *exact_p,
215 bool exact_p =
false;
265 static list cells_to_effects_according_to_effect(
list cl,
effect eff,
bool exact_p)
297 bool exact_p =
false;
312 pips_debug(8,
"no equivalent constant path found -> anywhere effect\n");
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.
descriptor make_descriptor(enum descriptor_utype tag, void *val)
void free_effect(effect p)
bool effect_consistent_p(effect p)
approximation copy_approximation(approximation p)
APPROXIMATION.
approximation make_approximation_may(void)
effect make_effect(cell a1, action a2, approximation a3, descriptor a4)
descriptor copy_descriptor(descriptor p)
DESCRIPTOR.
effect copy_effect(effect p)
EFFECT.
static reference ref
Current stmt (an integer)
bool entity_abstract_location_p(entity al)
#define pips_debug_effects(level, message, l_eff)
#define pips_debug_effect(level, message, eff)
for debug
list generic_eval_cell_with_points_to(cell input_cell, descriptor input_desc, list ptl, bool *exact_p, transformer current_precondition, bool(*cell_reference_preceding_p_func)(reference, descriptor, reference, descriptor, transformer, bool, bool *), void(*cell_reference_with_address_of_cell_reference_translation_func)(reference, descriptor, reference, descriptor, int, reference *, descriptor *, bool *), void(*cell_reference_conversion_func)(reference, reference *, descriptor *))
bool effects_private_current_context_empty_p(void)
void effects_to_may_effects(list)
effect make_anywhere_effect(action)
transformer effects_private_current_context_head(void)
statement effects_private_current_stmt_head(void)
effect(* effect_dup_func)(effect eff)
void effects_to_read_effects(list)
list simple_effect_to_constant_path_effects_with_points_to(effect eff)
void simple_reference_to_simple_reference_conversion(reference ref, reference *output_ref, descriptor *output_desc)
bool simple_cell_preceding_p(cell c1, descriptor d1, cell c2, descriptor d2, transformer current_precondition, bool strict_p, bool *exact_p)
void simple_cell_to_simple_cell_conversion(cell input_cell, cell *output_cell, descriptor *output_desc)
bool simple_cell_reference_preceding_p(reference r1, descriptor __attribute__((unused)) d1, reference r2, descriptor __attribute__((unused)) d2, transformer __attribute__((unused)) current_precondition, bool strict_p, bool *exact_p)
list simple_effect_to_constant_path_effects_with_pointer_values(effect eff)
list effect_to_constant_path_effects_with_points_to(effect eff, statement s, transformer context)
list eval_simple_cell_with_points_to(cell c, descriptor __attribute__((unused)) d, list ptl, bool *exact_p, transformer __attribute__((unused)) t)
bool path_preceding_p(effect eff1, effect eff2, transformer current_precondition, bool strict_p, bool *exact_p)
list eval_cell_with_points_to(cell c, list ptl, bool *exact_p)
for backward compatibility
void simple_cell_reference_with_address_of_cell_reference_translation(reference, descriptor, reference, descriptor, int, reference *, descriptor *, bool *)
#define effect_may_p(eff)
#define effect_any_reference(e)
FI: cannot be used as a left hand side.
#define effect_read_p(eff)
#define effect_scalar_p(eff) entity_scalar_p(effect_entity(eff))
reference cell_any_reference(cell)
API for reference.
bool effect_reference_dereferencing_p(reference, bool *)
entity effect_entity(effect)
cproto-generated files
bool undefined_pointer_value_entity_p(entity)
points_to_list load_pt_to_list(statement)
bool null_pointer_value_entity_p(entity)
#define cell_relations_list(x)
#define effect_descriptor(x)
#define descriptor_undefined
#define effect_approximation(x)
void gen_full_free_list(list l)
#define ENDP(l)
Test if a list is empty.
list gen_nreverse(list cp)
reverse a list in place
#define POP(l)
Modify a list pointer to point on the next element of the list.
#define NIL
The empty list (nil in Lisp)
size_t gen_length(const list l)
#define CONS(_t_, _i_, _l_)
List element cell constructor (insert an element at the beginning of a list)
list gen_nconc(list cp1, list cp2)
physically concatenates CP1 and CP2 but do not duplicates the elements
#define CAR(pcons)
Get the value of the first element of a list.
void gen_free_list(list l)
free the spine of the list
#define FOREACH(_fe_CASTER, _fe_item, _fe_list)
Apply/map an instruction block on all the elements of a list.
#define pips_debug
these macros use the GNU extensions that allow variadic macros, including with an empty list.
pv_context make_simple_pv_context(void)
cell_relations load_pv(statement)
list effect_find_aliased_paths_with_pointer_values(effect, list, pv_context *)
find all paths equivalent to eff cell in l_pv by performing a transitive closure
void reset_pv_context(pv_context *)
#define points_to_list_list(x)
#define points_to_list_bottom(x)
string reference_to_string(reference r)
bool same_entity_p(entity e1, entity e2)
predicates on entities
bool expression_equal_p(expression e1, expression e2)
Syntactic equality e1==e2.
bool unbounded_expression_p(expression e)
#define transformer_undefined
#define reference_variable(x)
#define EXPRESSION(x)
EXPRESSION.
#define reference_indices(x)
static transformer current_precondition
The structure used to build lists in NewGen.
pv_context is a structure holding the methods to use during pointer values analyses