diff options
author | Jan Sjodin <jan.sjodin@amd.com> | 2008-05-20 19:11:56 +0000 |
---|---|---|
committer | Sebastian Pop <spop@gcc.gnu.org> | 2008-05-20 19:11:56 +0000 |
commit | 9f275479a9813d4165e9e6766e4f7c6eec1b9792 (patch) | |
tree | ea4cf8fac1c14940e25a8a624cebe081009b766c /gcc/tree-loop-linear.c | |
parent | 5f620f482ec35b18c419368a8cae2218bd4cacf5 (diff) | |
download | gcc-9f275479a9813d4165e9e6766e4f7c6eec1b9792.tar.gz |
tree-loop-linear.c (gather_interchange_stats): Look in the access matrix...
2008-05-20 Jan Sjodin <jan.sjodin@amd.com>
Sebastian Pop <sebastian.pop@amd.com>
* tree-loop-linear.c (gather_interchange_stats): Look in the access matrix,
and never look at the tree representation of the memory accesses.
(linear_transform_loops): Computes parameters and access matrices.
* tree-data-ref.c (compute_data_dependences_for_loop): Returns false when fails.
(access_matrix_get_index_for_parameter): New.
* tree-data-ref.h (struct access_matrix): New.
(AM_LOOP_NEST_NUM, AM_NB_INDUCTION_VARS, AM_PARAMETERS, AM_MATRIX,
AM_NB_PARAMETERS, AM_CONST_COLUMN_INDEX, AM_NB_COLUMNS,
AM_GET_SUBSCRIPT_ACCESS_VECTOR, AM_GET_ACCESS_MATRIX_ELEMENT,
am_vector_index_for_loop): New.
(struct data_reference): Add field access_matrix.
(DR_ACCESS_MATRIX): New.
(compute_data_dependences_for_loop): Update declaration.
(lambda_collect_parameters, lambda_compute_access_matrices): Declared.
* lambda.h (lambda_vector_vec_p): Declared.
* lambda-code.c: Depend on pointer-set.h.
(lambda_collect_parameters_from_af, lambda_collect_parameters,
av_for_af_base, av_for_af, build_access_matrix,
lambda_compute_access_matrices): New.
* Makefile.in (lambda-code.o): Depend on pointer-set.h.
Co-Authored-By: Sebastian Pop <sebastian.pop@amd.com>
From-SVN: r135672
Diffstat (limited to 'gcc/tree-loop-linear.c')
-rw-r--r-- | gcc/tree-loop-linear.c | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/gcc/tree-loop-linear.c b/gcc/tree-loop-linear.c index 806d9e6d1cb..f58bd11b7fb 100644 --- a/gcc/tree-loop-linear.c +++ b/gcc/tree-loop-linear.c @@ -146,19 +146,17 @@ gather_interchange_stats (VEC (ddr_p, heap) *dependence_relations, for (it = 0; it < DR_NUM_DIMENSIONS (dr); it++, ref = TREE_OPERAND (ref, 0)) { - tree chrec = DR_ACCESS_FN (dr, it); - tree tstride = evolution_part_in_loop_num (chrec, loop->num); + int num = am_vector_index_for_loop (DR_ACCESS_MATRIX (dr), loop->num); + int istride = AM_GET_ACCESS_MATRIX_ELEMENT (DR_ACCESS_MATRIX (dr), it, num); tree array_size = TYPE_SIZE (TREE_TYPE (ref)); double_int dstride; - if (tstride == NULL_TREE - || array_size == NULL_TREE - || TREE_CODE (tstride) != INTEGER_CST + if (array_size == NULL_TREE || TREE_CODE (array_size) != INTEGER_CST) continue; dstride = double_int_mul (tree_to_double_int (array_size), - tree_to_double_int (tstride)); + shwi_to_double_int (istride)); (*access_strides) = double_int_add (*access_strides, dstride); } } @@ -320,6 +318,7 @@ linear_transform_loops (void) loop_iterator li; VEC(tree,heap) *oldivs = NULL; VEC(tree,heap) *invariants = NULL; + VEC(tree,heap) *lambda_parameters = NULL; VEC(tree,heap) *remove_ivs = VEC_alloc (tree, heap, 3); struct loop *loop_nest; tree oldiv_stmt; @@ -330,6 +329,7 @@ linear_transform_loops (void) unsigned int depth = 0; VEC (ddr_p, heap) *dependence_relations; VEC (data_reference_p, heap) *datarefs; + lambda_loopnest before, after; lambda_trans_matrix trans; struct obstack lambda_obstack; @@ -341,11 +341,18 @@ linear_transform_loops (void) VEC_truncate (tree, oldivs, 0); VEC_truncate (tree, invariants, 0); + VEC_truncate (tree, lambda_parameters, 0); datarefs = VEC_alloc (data_reference_p, heap, 10); dependence_relations = VEC_alloc (ddr_p, heap, 10 * 10); - compute_data_dependences_for_loop (loop_nest, true, &datarefs, - &dependence_relations); + if (!compute_data_dependences_for_loop (loop_nest, true, &datarefs, + &dependence_relations)) + continue; + + lambda_collect_parameters (datarefs, &lambda_parameters); + if (!lambda_compute_access_matrices (datarefs, lambda_parameters, + loop_nest->num)) + continue; if (dump_file && (dump_flags & TDF_DETAILS)) dump_ddrs (dump_file, dependence_relations); |