summaryrefslogtreecommitdiff
path: root/gcc/tree-loop-linear.c
diff options
context:
space:
mode:
authorbstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4>2008-05-21 12:36:41 +0000
committerbstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4>2008-05-21 12:36:41 +0000
commite6bd3967e54965d9b07823192c9772d71ba2d10b (patch)
tree6d0b2480705fa940efad2d1f74cddcb48d7b0511 /gcc/tree-loop-linear.c
parent1336ab126a09c21576c34cc2da416d114b6cab4b (diff)
downloadgcc-e6bd3967e54965d9b07823192c9772d71ba2d10b.tar.gz
2008-05-21 Basile Starynkevitch <basile@starynkevitch.net>
MELT branch merged with trunk r135714 * gcc/basilys.h: explicit [re-]declaration of fatail_error. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/melt-branch@135715 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-loop-linear.c')
-rw-r--r--gcc/tree-loop-linear.c23
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);