diff options
author | spop <spop@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-01-03 02:38:24 +0000 |
---|---|---|
committer | spop <spop@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-01-03 02:38:24 +0000 |
commit | bfe20447cb8ed0643e71f42a4277b643ed1f952f (patch) | |
tree | 7b6ea1945bfbc46843c39712210b90e54ad59129 /gcc/tree-data-ref.c | |
parent | 198ca57977f698cd7c3c748ece16faa2e164561c (diff) | |
download | gcc-bfe20447cb8ed0643e71f42a4277b643ed1f952f.tar.gz |
2007-12-19 Sebastian Pop <sebastian.pop@amd.com>
PR tree-optimization/34635
* tree-data-ref.c (add_other_self_distances): Make sure that the
evolution step is constant.
* gcc.dg/tree-ssa/pr34635.c: New.
* gcc.dg/tree-ssa/pr34635-1.c: New.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@131275 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-data-ref.c')
-rw-r--r-- | gcc/tree-data-ref.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/gcc/tree-data-ref.c b/gcc/tree-data-ref.c index 07b311a93fd..88f6347f777 100644 --- a/gcc/tree-data-ref.c +++ b/gcc/tree-data-ref.c @@ -2818,9 +2818,9 @@ constant_access_functions (const struct data_dependence_relation *ddr) return true; } - /* Helper function for the case where DDR_A and DDR_B are the same - multivariate access function. */ + multivariate access function with a constant step. For an example + see pr34635-1.c. */ static void add_multivariate_self_dist (struct data_dependence_relation *ddr, tree c_2) @@ -2890,7 +2890,17 @@ add_other_self_distances (struct data_dependence_relation *ddr) return; } - add_multivariate_self_dist (ddr, DR_ACCESS_FN (DDR_A (ddr), 0)); + access_fun = DR_ACCESS_FN (DDR_A (ddr), 0); + + if (TREE_CODE (CHREC_LEFT (access_fun)) == POLYNOMIAL_CHREC) + add_multivariate_self_dist (ddr, access_fun); + else + /* The evolution step is not constant: it varies in + the outer loop, so this cannot be represented by a + distance vector. For example in pr34635.c the + evolution is {0, +, {0, +, 4}_1}_2. */ + DDR_AFFINE_P (ddr) = false; + return; } |