diff options
author | Sebastian Pop <sebastian.pop@inria.fr> | 2007-03-15 00:23:24 +0100 |
---|---|---|
committer | Sebastian Pop <spop@gcc.gnu.org> | 2007-03-14 23:23:24 +0000 |
commit | c4d8f83b551c953d7cbbe85cf24bab3595defaaa (patch) | |
tree | d21c23b85fba4827eae8894e489ee403c78576ed /gcc/tree-loop-linear.c | |
parent | 1f7f19c46a9fa0c1be528bfb9fa54196d8ca0e4b (diff) | |
download | gcc-c4d8f83b551c953d7cbbe85cf24bab3595defaaa.zip gcc-c4d8f83b551c953d7cbbe85cf24bab3595defaaa.tar.gz gcc-c4d8f83b551c953d7cbbe85cf24bab3595defaaa.tar.bz2 |
tree-loop-linear.c (gather_interchange_stats): For multidimensional arrays...
* tree-loop-linear.c (gather_interchange_stats): For multidimensional
arrays, multiply the access strides by the size of the sub-array.
* testsuite/gcc.dg/tree-ssa/ltrans-5.c: New.
From-SVN: r122935
Diffstat (limited to 'gcc/tree-loop-linear.c')
-rw-r--r-- | gcc/tree-loop-linear.c | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/gcc/tree-loop-linear.c b/gcc/tree-loop-linear.c index 61fdee3..94f3d59 100644 --- a/gcc/tree-loop-linear.c +++ b/gcc/tree-loop-linear.c @@ -134,24 +134,30 @@ gather_interchange_stats (VEC (ddr_p, heap) *dependence_relations, for (i = 0; VEC_iterate (data_reference_p, datarefs, i, dr); i++) { unsigned int it; + tree ref = DR_REF (dr); tree stmt = DR_STMT (dr); struct loop *stmt_loop = loop_containing_stmt (stmt); struct loop *inner_loop = first_loop->inner; - + if (inner_loop != stmt_loop && !flow_loop_nested_p (inner_loop, stmt_loop)) continue; - for (it = 0; it < DR_NUM_DIMENSIONS (dr); it++) + + 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); - + tree tstride = evolution_part_in_loop_num (chrec, loop->num); + tree array_size = TYPE_SIZE (TREE_TYPE (ref)); + if (tstride == NULL_TREE - || TREE_CODE (tstride) != INTEGER_CST) + || array_size == NULL_TREE + || TREE_CODE (tstride) != INTEGER_CST + || TREE_CODE (array_size) != INTEGER_CST) continue; - - (*access_strides) += int_cst_value (tstride); + + (*access_strides) += + int_cst_value (array_size) * int_cst_value (tstride); } } } |