diff options
author | Andrew Pinski <andrew_pinski@playstation.sony.com> | 2007-05-21 23:08:54 +0000 |
---|---|---|
committer | Andrew Pinski <pinskia@gcc.gnu.org> | 2007-05-21 16:08:54 -0700 |
commit | a50411de14fec4cf78acbe5dcc2ec0de7bb5e27f (patch) | |
tree | 4a5af0fdf3986135df36eb2ffebfc49af9eaab2a /gcc/tree-data-ref.c | |
parent | 60c4429c7e517425d5e43c688b720516a5338648 (diff) | |
download | gcc-a50411de14fec4cf78acbe5dcc2ec0de7bb5e27f.zip gcc-a50411de14fec4cf78acbe5dcc2ec0de7bb5e27f.tar.gz gcc-a50411de14fec4cf78acbe5dcc2ec0de7bb5e27f.tar.bz2 |
re PR tree-optimization/31995 (can't determine dependence between p->a[x+i] and p->a[x+i+1])
2007-05-21 Andrew Pinski <andrew_pinski@playstation.sony.com>
PR middle-end/31995
* tree-chrec.c (evolution_function_is_affine_multivariate_p):
Add loopno argument. Use evolution_function_is_invariant_rec_p
instead of evolution_function_is_constant_p.
Update calls to evolution_function_is_affine_multivariate_p.
* tree-chrec.h (evolution_function_is_affine_multivariate_p):
Add loopno argument.
* tree-scalar-evolution.c (gather_chrec_stats): Call
evolution_function_is_affine_multivariate_p with a loop
number of 0.
* tree-data-ref.c (analyze_miv_subscript): Likewise.
(analyze_overlapping_iterations): Likewise.
(access_functions_are_affine_or_constant_p):
Likewise.
(build_classic_dist_vector_1): If the access functions
are equal, don't do anything.
2007-05-21 Andrew Pinski <andrew_pinski@playstation.sony.com>
PR middle-end/31995
* gcc.dg/vect/vect-102a.c: New test.
From-SVN: r124927
Diffstat (limited to 'gcc/tree-data-ref.c')
-rw-r--r-- | gcc/tree-data-ref.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/gcc/tree-data-ref.c b/gcc/tree-data-ref.c index 1a81431..6fa59e8 100644 --- a/gcc/tree-data-ref.c +++ b/gcc/tree-data-ref.c @@ -2458,7 +2458,7 @@ analyze_miv_subscript (tree chrec_a, else if (evolution_function_is_constant_p (difference) /* For the moment, the following is verified: - evolution_function_is_affine_multivariate_p (chrec_a) */ + evolution_function_is_affine_multivariate_p (chrec_a, 0) */ && !gcd_of_steps_may_divide_p (chrec_a, difference)) { /* testsuite/.../ssa-chrec-33.c @@ -2472,9 +2472,9 @@ analyze_miv_subscript (tree chrec_a, dependence_stats.num_miv_independent++; } - else if (evolution_function_is_affine_multivariate_p (chrec_a) + else if (evolution_function_is_affine_multivariate_p (chrec_a, 0) && !chrec_contains_symbols (chrec_a) - && evolution_function_is_affine_multivariate_p (chrec_b) + && evolution_function_is_affine_multivariate_p (chrec_b, 0) && !chrec_contains_symbols (chrec_b)) { /* testsuite/.../ssa-chrec-35.c @@ -2563,7 +2563,7 @@ analyze_overlapping_iterations (tree chrec_a, /* If they are the same chrec, and are affine, they overlap on every iteration. */ else if (eq_evolutions_p (chrec_a, chrec_b) - && evolution_function_is_affine_multivariate_p (chrec_a)) + && evolution_function_is_affine_multivariate_p (chrec_a, 0)) { dependence_stats.num_same_subscript_function++; *overlap_iterations_a = conflict_fn (1, affine_fn_cst (integer_zero_node)); @@ -2575,8 +2575,8 @@ analyze_overlapping_iterations (tree chrec_a, yet. */ else if ((chrec_contains_symbols (chrec_a) || chrec_contains_symbols (chrec_b)) - && (!evolution_function_is_affine_multivariate_p (chrec_a) - || !evolution_function_is_affine_multivariate_p (chrec_b))) + && (!evolution_function_is_affine_multivariate_p (chrec_a, 0) + || !evolution_function_is_affine_multivariate_p (chrec_b, 0))) { dependence_stats.num_subscript_undetermined++; *overlap_iterations_a = conflict_fn_not_known (); @@ -2745,7 +2745,7 @@ build_classic_dist_vector_1 (struct data_dependence_relation *ddr, init_v[index] = 1; *init_b = true; } - else + else if (!operand_equal_p (access_fn_a, access_fn_b, 0)) { /* This can be for example an affine vs. constant dependence (T[i] vs. T[3]) that is not an affine dependence and is @@ -3182,7 +3182,7 @@ access_functions_are_affine_or_constant_p (struct data_reference *a) for (i = 0; VEC_iterate (tree, fns, i, t); i++) if (!evolution_function_is_constant_p (t) - && !evolution_function_is_affine_multivariate_p (t)) + && !evolution_function_is_affine_multivariate_p (t, 0)) return false; return true; |