6 #ifndef pointer_values_header_included
7 #define pointer_values_header_included
39 bool initial_pointer_values_p;
44 list (*db_get_in_pv_func)(
const char *);
45 void (*db_put_in_pv_func)(
const char * ,
list);
46 list (*db_get_out_pv_func)(
const char *);
47 void (*db_put_out_pv_func)(
const char * ,
list);
48 list (*db_get_initial_pv_func)(
const char *);
49 void (*db_put_initial_pv_func)(
const char * ,
list);
50 list (*db_get_program_pv_func)();
51 void (*db_put_program_pv_func)(
list);
66 void (*cell_reference_with_value_of_cell_reference_translation_func)
68 void (*cell_reference_with_address_of_cell_reference_translation_func)
87 list result_paths_interpretations;
91 #define pips_debug_pv_results(level, message, pv_res) \
92 ifdebug(level) { pips_debug(level, "%s\n", message); \
93 print_pv_results(pv_res);}
void const char const char const int
struct _newgen_struct_reference_ * reference
struct _newgen_struct_effect_ * effect
bool(* cell_preceding_p_func)(cell, descriptor, cell, descriptor, bool, bool *)
struct _newgen_struct_cell_relation_ * cell_relation
struct _newgen_struct_cell_ * cell
struct _newgen_struct_cell_interpretation_ * cell_interpretation
struct _newgen_struct_descriptor_ * descriptor
struct _newgen_struct_statement_cell_relations_ * statement_cell_relations
int bool
we cannot use an enum or stdbool because we need to be compatible with newgen, thus boolean need to h...
void pointer_values_remove_var(entity, bool, list, pv_results *, pv_context *)
effects delete_kill_pv(statement)
void generic_print_code_gen_kill_pv(char *)
list db_get_in_simple_pv(const char *)
void store_or_update_gen_pv(statement, cell_relations)
void update_pv(statement, cell_relations)
pv_context make_simple_pv_context(void)
void set_kill_pv(statement_effects)
void store_kill_pv(statement, effects)
list kill_pointer_values(list, list, pv_context *)
eliminate the cells of l_kill from l_in
bool print_code_simple_pointer_values(char *)
cell_relations delete_pv(statement)
pv_results make_pv_results(void)
void range_to_post_pv(range, list, pv_results *, pv_context *)
void assignment_to_post_pv(expression, bool, expression, bool, list, pv_results *, pv_context *)
bool bound_kill_pv_p(statement)
void error_reset_gen_pv(void)
list db_get_out_simple_pv(const char *)
statement_effects get_kill_pv(void)
void set_pv(statement_cell_relations)
void expression_to_post_pv(expression, list, pv_results *, pv_context *)
void intrinsic_to_post_pv(entity, list, list, pv_results *, pv_context *)
pointer_values_intrinsics.c
list pvs_composition_with_transformer(list, transformer, pv_context *)
void db_put_simple_pv(const char *, statement_cell_relations)
cell_relations load_pv(statement)
void store_or_update_kill_pv(statement, effects)
void error_reset_pv(void)
cell_relation simple_pv_translate(cell_relation, bool, cell_relation)
void db_put_program_simple_pv(list)
void store_gen_pv(statement, cell_relations)
void pv_context_statement_pop(pv_context *)
list simple_pvs_may_union(list, list)
statement_cell_relations db_get_simple_pv(const char *)
I don't know how to deal with these mappings if we have to analyse several modules at the same time w...
bool pv_undefined_p(void)
cproto-generated files
list simple_pv_may_union(cell_relation, cell_relation)
void pv_context_statement_push(statement, pv_context *)
text text_pv(entity, int, statement)
prettyprint.c
void single_pointer_assignment_to_post_pv(effect, list, list, bool, list, pv_results *, pv_context *)
statement_cell_relations get_gen_pv(void)
void store_or_update_pv(statement, cell_relations)
void error_reset_kill_pv(void)
void multiple_pointer_assignment_to_post_pv(effect, type, list, list, bool, list, pv_results *, pv_context *)
list make_anywhere_anywhere_pvs(void)
effects load_kill_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
list simple_pv_must_union(cell_relation, cell_relation)
bool initial_simple_pointer_values(const string)
list db_get_program_simple_pv(void)
bool generic_print_code_pv(char *, pv_context *)
void reset_pv_context(pv_context *)
void db_put_out_simple_pv(const char *, list)
void print_pv_results(pv_results)
void db_put_in_simple_pv(const char *, list)
list simple_pvs_must_union(list, list)
list kill_pointer_value(effect, list, pv_context *)
eliminate the cell of eff_kill from l_in
void free_pv_results_paths(pv_results *)
bool simple_pvs_syntactically_equal_p(list, list)
list cell_relation_to_may_list(cell_relation)
void store_pv(statement, cell_relations)
void update_kill_pv(statement, effects)
list cell_relation_to_list(cell_relation)
void update_gen_pv(statement, cell_relations)
bool print_code_simple_gen_kill_pointer_values(char *)
list effect_find_equivalent_pointer_values(effect, list, cell_relation *, list *)
find pointer_values in l_in which give (possible or exact) paths equivalent to eff.
void db_put_initial_simple_pv(const char *, list)
statement pv_context_statement_head(pv_context *)
bool program_simple_pointer_values(const string)
cell_relations load_gen_pv(statement)
bool kill_pv_undefined_p(void)
bool simple_pointer_values(const string)
interface to compute the simple pointer values of a given module
void set_gen_pv(statement_cell_relations)
list db_get_initial_simple_pv(const char *)
cell_relations delete_gen_pv(statement)
bool bound_gen_pv_p(statement)
cell_relation simple_pv_composition_with_transformer(cell_relation, transformer)
list make_simple_pv_from_simple_effects(effect, effect, cell_interpretation, list)
pointer_values_operators.c
statement_cell_relations get_pv(void)
bool bound_pv_p(statement)
bool gen_pv_undefined_p(void)
bool pvs_union_combinable_p(cell_relation, cell_relation)
struct _newgen_struct_transformer_ * transformer
The structure used to build lists in NewGen.
pv_context is a structure holding the methods to use during pointer values analyses
pv_results is a structure holding the different results of an expression pointer values analysis