6 #ifndef wp65_header_included
7 #define wp65_header_included
42 #define EMULATED_SHARED_MEMORY_PREFIX "ES_"
43 #define LOCAL_MEMORY_PREFIX "L_"
44 #define LOCAL_MEMORY_SEPARATOR "_"
45 #define COMPUTE_ENGINE_NAME "WP65"
47 #define BANK_NAME "BANK"
49 #define PROCESSOR_IDENTIFIER "PROC_ID"
50 #define BANK_IDENTIFIER "BANK_ID"
51 #define BANK_LINE_IDENTIFIER "L"
52 #define BANK_OFFSET_IDENTIFIER "O"
54 #define SUFFIX_FOR_INDEX_TILE_IN_INITIAL_BASIS "_1"
55 #define SUFFIX_FOR_INDEX_TILE_IN_TILE_BASIS "_0"
56 #define PREFIX_FOR_LOCAL_TILE_BASIS "L_"
66 #define PIPELINE_DEPTH 1
68 #define MAXIMUM_LOCAL_VARIABLE_NAME_SIZE 256
77 extern statement make_scanning_over_tiles(
entity ,
list ,
entity ,
int ,
tiling ,
Pbase ,
Pbase ,
Pbase ,
Psysteme ,
int ,
int );
79 extern list make_compute_block(
entity ,
statement ,
Pvecteur ,
hash_table ,
tiling ,
Pbase ,
Pbase ,
Pbase ,
Pbase ,
Psysteme ,
int ,
int );
87 extern void make_store_blocks(
entity ,
entity ,
entity ,
entity ,
entity ,
entity ,
list ,
hash_table ,
Psysteme ,
Pbase ,
Pbase ,
Pbase ,
Pbase ,
entity ,
int ,
int ,
int ,
statement *,
statement *,
int ,
int );
88 extern void make_load_blocks(
entity ,
entity ,
entity ,
entity ,
entity ,
entity ,
list ,
hash_table ,
Psysteme ,
Pbase ,
Pbase ,
Pbase ,
Pbase ,
entity ,
int ,
int ,
int ,
statement *,
statement *,
int ,
int );
93 extern void loop_nest_to_local_variables(
entity ,
entity ,
entity ,
hash_table ,
hash_table ,
hash_table ,
hash_table ,
hash_table ,
hash_table ,
list ,
statement ,
Pbase ,
graph ,
int ,
int ,
int ,
tiling );
106 extern void instruction_to_wp65_code(
entity ,
list ,
graph ,
int ,
int ,
int ,
int ,
entity ,
entity ,
Pbase ,
hash_table ,
hash_table ,
entity ,
statement ,
entity ,
statement ,
statement_mapping ,
statement_mapping );
112 extern void loop_nest_movement_generation(
entity ,
statement ,
int ,
int ,
int ,
int ,
entity ,
entity ,
Pbase ,
hash_table ,
hash_table ,
entity ,
statement ,
entity ,
statement ,
statement_mapping ,
statement_mapping ,
statement ,
bool ,
Psysteme ,
Pbase ,
Pbase ,
Pbase ,
Pbase ,
Pbase ,
Pbase ,
list ,
list *,
list *,
list *,
list *,
int ,
int ,
hash_table ,
hash_table ,
hash_table ,
hash_table );
113 extern void loop_nest_to_wp65_code(
entity ,
statement ,
graph ,
int ,
int ,
int ,
int ,
entity ,
entity ,
Pbase ,
hash_table ,
hash_table ,
entity ,
statement ,
entity ,
statement ,
statement_mapping ,
statement_mapping ,
statement );
114 extern void make_all_movement_blocks(
entity ,
entity ,
entity ,
entity ,
list ,
hash_table ,
hash_table ,
hash_table ,
hash_table ,
int ,
int ,
int ,
Psysteme ,
Pbase ,
Pbase ,
entity ,
Pbase ,
Pbase ,
list *,
list *,
tag ,
int ,
int );
141 extern bool wp65(
const string );
142 extern void module_to_wp65_modules(
entity ,
statement ,
graph ,
int ,
int ,
int ,
int ,
entity *,
statement *,
entity *,
statement *);
155 extern void model_fscan(FILE *,
int *,
int *,
int *);
156 extern void get_model(
int *,
int *,
int *);
177 extern void insert_run_time_communications(
entity ,
entity ,
Pbase ,
int ,
int ,
entity ,
list ,
statement_mapping ,
statement_mapping ,
list *,
list *,
hash_table ,
bool ,
Pbase ,
tiling ,
Pvecteur ,
Pvecteur ,
Pvecteur );
Value * matrice
package matrice
le type des coefficients dans les vecteurs: Value est defini dans le package arithmetique
The structure used to build lists in NewGen.
void * Variable
arithmetique is a requirement for vecteur, but I do not want to inforce it in all pips files....
Psysteme tile_membership(matrice, Pbase, Pbase)
Psysteme tile_membership(P, origin, member):
void instruction_to_wp65_code(entity, list, graph, int, int, int, int, entity, entity, Pbase, hash_table, hash_table, entity, statement, entity, statement, statement_mapping, statement_mapping)
void free_store_map(void)
bool test_run_time_communications(list, statement_mapping, statement_mapping)
list make_compute_block(entity, statement, Pvecteur, hash_table, tiling, Pbase, Pbase, Pbase, Pbase, Psysteme, int, int)
void loop_nest_to_wp65_code(entity, statement, graph, int, int, int, int, entity, entity, Pbase, hash_table, hash_table, entity, statement, entity, statement, statement_mapping, statement_mapping, statement)
void set_dimensions_of_local_variables(hash_table, Pbase, tiling, hash_table)
list classify_reference(list, reference)
This function classifies the references in lists.
void find_iteration_domain(statement, Psysteme *, Pbase *, int *, list *, instruction *)
find_iteration_domain.c
void call_instruction_to_communications(statement, statement, statement, list *, list *, statement_mapping *, statement_mapping *, hash_table, list *)
communications.c
entity make_emulated_shared_variable(entity, entity, int, int)
Value offset_dim1
WP65_INCLUDED.
void compute_iteration_domain(list, Psysteme *, Pbase *)
void statement_to_communications(statement, statement, statement, list *, list *, statement_mapping *, statement_mapping *, hash_table, list *)
This function associates to each variable in stmt the statement where it should be communicated.
bool store_map_undefined_p(void)
void reference_conversion_expression(expression, hash_table, Pvecteur, Pbase, Pbase)
entity MakeEntityFunction(string)
void make_store_blocks(entity, entity, entity, entity, entity, entity, list, hash_table, Psysteme, Pbase, Pbase, Pbase, Pbase, entity, int, int, int, statement *, statement *, int, int)
list load_statement_fetch(statement)
void reference_list_print(list)
This function prints the references belonging to l.
bool wp65_conform_p(statement)
void update_statement_fetch(statement, list)
void concat_data_list(list *, list *, statement, statement_mapping, bool)
void reference_list_add(list *, list *)
This function adds all the references of l2 to l1 if they don't appear in l1.
void variable_list_update(list *, reference)
This function adds the reference r to List l, if the reference_variable(r) doesn't belong to l.
statement_mapping get_fetch_map(void)
entity create_local_index(entity, Pvecteur, string)
basis.c
void store_statement_store(statement, list)
void set_dimensions_of_local_variable_family(list, Psysteme, list, tiling, int)
void set_dimensions_of_local_variable_family(llv, tc, lr):
entity create_local_index2(entity, Pvecteur, string)
bool full_parallel_loop_nest_p(statement, statement, int, graph, bool *)
void loop_nest_movement_generation(entity, statement, int, int, int, int, entity, entity, Pbase, hash_table, hash_table, entity, statement, entity, statement, statement_mapping, statement_mapping, statement, bool, Psysteme, Pbase, Pbase, Pbase, Pbase, Pbase, Pbase, list, list *, list *, list *, list *, int, int, hash_table, hash_table, hash_table, hash_table)
statement make_scanning_over_one_tile(entity, statement, tiling, Pbase, Pbase, Pbase, Pbase, Psysteme, int, int)
make_scanning_over_one_tile():
void compute_communications(list, statement_mapping *, statement_mapping *)
This function associates to each variable the statement in l where it should be communicated Fecth_ma...
void delete_statement_fetch(statement)
list reference_conversion_computation(entity, list *, expression, Pbase, Pbase, Pbase, tiling)
void delete_statement_store(statement)
void make_all_movement_blocks(entity, entity, entity, entity, list, hash_table, hash_table, hash_table, hash_table, int, int, int, Psysteme, Pbase, Pbase, entity, Pbase, Pbase, list *, list *, tag, int, int)
generates all data movements related to entity v, loads or stores depending on use_def
list expression_to_operand_list(expression, list)
This function gives the list of operands belonging to Expression e.
statement_mapping get_store_map(void)
void module_to_wp65_modules(entity, statement, graph, int, int, int, int, entity *, statement *, entity *, statement *)
void reset_store_map(void)
entity ith_index_of_ref(reference, int)
entity reference_translation(reference, Pbase, Pbase)
bool list_of_calls_p(list)
instruction_to_wp65_code.c
void set_fetch_map(statement_mapping)
bool reference_in_list_p(reference, list)
This function tests whether at least one array indice of Reference r belongs to List lwr or not.
void call_to_wp65_code(statement, entity, entity, entity, entity, statement, statement, statement_mapping, statement_mapping, hash_table)
bool statement_fetch_undefined_p(statement)
tiling loop_nest_to_tile(Psysteme, int, Pbase, int, int, int)
tiling.c
statement make_scanning_over_tiles(entity, list, entity, int, tiling, Pbase, Pbase, Pbase, Psysteme, int, int)
make_scanning_over_tiles()
list array_scalar_access_to_bank_communication(entity, Pbase, int, int, list, bool, entity, entity, bool)
void update_statement_store(statement, list)
void reference_scalar_defined_p(reference)
bool array_indice_in_list_p(reference, list)
void make_store_map(void)
bool reference_conflicting_test_and_update(reference, graph, hash_table, hash_table, hash_table, hash_table)
reference_conflicting_test_and_update():
bool reference_conflicting_p(reference, reference, graph)
bool ref_in_list_p(list, reference)
references.c
void loop_instruction_to_communications(statement, statement, statement, list *, list *, statement_mapping *, statement_mapping *, hash_table, list *)
This function associates to each variable in the loop the statement where it should be communicated (...
void update_map(statement_mapping, statement, reference)
void free_fetch_map(void)
void get_model(int *, int *, int *)
reference translate_IO_ref(call, hash_table, bool)
This function translates a reference in I/O statement into its corresponding emulated shared memory r...
void model_fscan(FILE *, int *, int *, int *)
list make_new_local_variables(entity, entity, int, int, hash_table)
entity find_or_create_emulated_shared_variable(entity, entity, hash_table, int, int)
void insert_run_time_communications(entity, entity, Pbase, int, int, entity, list, statement_mapping, statement_mapping, list *, list *, hash_table, bool, Pbase, tiling, Pvecteur, Pvecteur, Pvecteur)
void tile_change_of_basis(Psysteme, Pbase, Pbase, Pbase, tiling)
void store_statement_fetch(statement, list)
void make_fetch_map(void)
void make_load_blocks(entity, entity, entity, entity, entity, entity, list, hash_table, Psysteme, Pbase, Pbase, Pbase, Pbase, entity, int, int, int, statement *, statement *, int, int)
void fprint_wp65_hash_tables(FILE *, hash_table, hash_table, hash_table, hash_table, hash_table)
Ignore this function: debugging purposes only.
loop ith_loop_in_loop_nest(statement, int)
list reference_conversion_statement(entity, statement, list *, hash_table, Pvecteur, Pbase, Pbase, Pbase, tiling)
void reference_conversion_statement(body, r_to_llv, offsets, initial_basis, local_basis):
void model_fprint(FILE *, int, int, int)
model.c
void loop_nest_to_local_variables(entity, entity, entity, hash_table, hash_table, hash_table, hash_table, hash_table, hash_table, list, statement, Pbase, graph, int, int, int, tiling)
variable.c
statement generate_io_wp65_code(statement, statement, hash_table, bool)
void reference_list_update(list *, reference)
This function add Reference r to List l, if r doesn't belong to l.
expression ref_in_implied_do(expression)
This function extracts from an implied_do expression the reference having to be computed or printed.
void eval_variable_in_statement(entity, statement, Variable, int)
void variable_list_add(list *, list *)
This function adds all the references of l2 to l1 if they don't appear in l1.
bool statement_store_undefined_p(statement)
bool fetch_map_undefined_p(void)
wp65.c
void iteration_domain_from_statement(list *, statement, int *, list *, instruction *)
void search_parallel_loops(statement, statement, graph, bool[11])
Psysteme build_sc_with_several_uniform_ref(entity, cons *, Psysteme, Pbase *)
build_sc_with_several_uniform_ref():
Psysteme make_tile_constraints(matrice, Pbase)
Psysteme make_tile_constraints(P, b):
void reset_fetch_map(void)
void create_tile_basis(entity, entity, entity, Pbase, Pbase *, Pbase *, Pbase *, Pbase *, Pbase *)
bool io_loop_nest_p(statement)
Test if the statement resulting from the perfectly_loop_nest_to_body function contains at first call ...
list load_statement_store(statement)
void include_constant_symbolic_communication(entity, list, bool, statement, entity)
void set_store_map(statement_mapping)
bool uniform_dependence_p(reference, reference)
This function checks if two references have a uniform dependence.