PIPS
|
#include "genC.h"
#include "linear.h"
#include "ri.h"
#include "ri-util.h"
#include "misc.h"
#include "pipsdbm.h"
#include "workspace-util.h"
#include "properties.h"
#include "control.h"
#include "effects-generic.h"
#include "effects-simple.h"
#include "effects-util.h"
#include "transformations.h"
Go to the source code of this file.
Functions | |
static void | fix_loop_index_sign (loop l) |
symbolic tiling less general, but works for symbolics bounds More... | |
void | do_symbolic_tiling (statement base, list vector) |
symbolic_tiling.c More... | |
static bool | symbolic_tiling_valid_p (statement sloop, size_t depth) |
checks if sloop is a perfectly nested loop of depth @depth More... | |
bool | symbolic_tiling (const char *module_name) |
check if tile_size is modified by sloop and generate a temporary variable if needed
we should also check tile_size has no write effect but currently, string_to_expression asserts this
outer loop new index
inner loop
outer loop
will help partial_eval
save
go on for the next one
once we are done, regenerate the whole thing
prepare chain all
set tail
chain all
update
he label have been duplicated by copy_statement
fix signed / unsigned types for further processing otherwise we could end with integer overflow
base | ase |
vector | ector |
Definition at line 64 of file symbolic_tiling.c.
References AddEntityToCurrentModule(), base, binary_intrinsic_expression, CAR, clean_up_sequences(), CONS, copy_expression(), copy_statement(), DEFAULT_INTEGER_TYPE_SIZE, DIVIDE_OPERATOR_NAME, EFFECT, effect_any_reference, effect_write_p, entity_empty_label(), entity_to_expression(), EXPRESSION, fix_loop_index_sign(), FOREACH, gen_append(), gen_nreverse(), gen_recurse, gen_true(), get_current_module_entity(), instruction_to_statement(), instruction_undefined, int_to_expression(), load_cumulated_rw_effects_list(), loop_body, loop_domain, loop_index, loop_range, make_assign_statement(), make_basic_int(), make_execution_parallel(), make_instruction_block(), make_instruction_loop(), make_loop(), make_new_scalar_variable(), make_op_exp(), make_range(), make_reference(), make_syntax_reference(), MIN_OPERATOR_NAME, MINUS_OPERATOR_NAME, MULTIPLY_OPERATOR_NAME, NIL, PLUS_OPERATOR_NAME, POP, proper_effects_of_expression(), range_upper, references_may_conflict_p(), set_conflict_testing_properties(), STATEMENT, statement_instruction, statement_label, statement_loop(), statement_undefined, update_expression_syntax(), and update_statement_instruction().
Referenced by do_simdizer_auto_tile_generate_all_tests(), and symbolic_tiling().
|
static |
symbolic tiling less general, but works for symbolics bounds
Definition at line 25 of file symbolic_tiling.c.
References AddEntityToCurrentModule(), DEFAULT_INTEGER_TYPE_SIZE, entity_consistent_p(), entity_formal_p(), entity_initial, entity_to_expression(), entity_type, entity_user_name(), free_type(), free_value(), get_current_module_entity(), get_referenced_entities(), local_entity_of_module_p(), loop_index, loop_range, make_basic_int(), make_new_scalar_variable_with_prefix(), make_type_variable(), make_value_expression(), make_variable(), NIL, pips_assert, replace_entity(), set_add_element(), SET_FOREACH, set_free(), type_consistent_p(), ultimate_type(), and unsigned_type_p().
Referenced by do_symbolic_tiling().
bool symbolic_tiling | ( | const char * | module_name | ) |
prelude
postlude
module_name | odule_name |
Definition at line 199 of file symbolic_tiling.c.
References clean_up_sequences(), db_get_memory_resource(), DB_PUT_MEMORY_RESOURCE, do_symbolic_tiling(), ENDP, find_label_entity(), find_loop_from_label(), gen_full_free_list(), gen_length(), get_current_module_entity(), get_current_module_name(), get_current_module_statement(), get_string_property(), module_name(), module_name_to_entity(), module_reorder(), pips_user_warning, reset_cumulated_rw_effects(), reset_current_module_entity(), reset_current_module_statement(), set_cumulated_rw_effects(), set_current_module_entity(), set_current_module_statement(), statement_undefined_p, string_to_expressions(), and symbolic_tiling_valid_p().
checks if sloop is a perfectly nested loop of depth @depth
Definition at line 179 of file symbolic_tiling.c.
References depth, execution_parallel_p, expression_integer_value(), get_bool_property(), intptr_t, loop_body, loop_execution, loop_range, pips_user_error, range_increment, statement_loop(), and statement_loop_p().
Referenced by symbolic_tiling().