diff options
author | Richard Sandiford <richard.sandiford@linaro.org> | 2018-05-02 07:40:22 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2018-05-02 07:40:22 +0000 |
commit | 9e4da9b5d5d3d8e14ab1748fafb08c6b9bfcf629 (patch) | |
tree | cc2d2a65d221c55d054add0a6d8e0909b1c800d6 /gcc/tree-vect-data-refs.c | |
parent | c2e1580cbe2023f9a7ff832d52587825c85c2f6d (diff) | |
download | gcc-9e4da9b5d5d3d8e14ab1748fafb08c6b9bfcf629.zip gcc-9e4da9b5d5d3d8e14ab1748fafb08c6b9bfcf629.tar.gz gcc-9e4da9b5d5d3d8e14ab1748fafb08c6b9bfcf629.tar.bz2 |
Tighten early exit in vect_analyze_data_ref_dependence (PR85586)
The problem in this PR was that we didn't consider aliases between
writes in the same strided group. After tightening the early exit
we get the expected abs(step) >= 2 versioning check.
2018-05-02 Richard Sandiford <richard.sandiford@linaro.org>
gcc/
PR tree-optimization/85586
* tree-vect-data-refs.c (vect_analyze_data_ref_dependence): Only
exit early for statements in the same group if the accesses are
not strided.
gcc/testsuite/
PR tree-optimization/85586
* gcc.dg/vect/pr85586.c: New test.
From-SVN: r259822
Diffstat (limited to 'gcc/tree-vect-data-refs.c')
-rw-r--r-- | gcc/tree-vect-data-refs.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/gcc/tree-vect-data-refs.c b/gcc/tree-vect-data-refs.c index df362b0..9608b76 100644 --- a/gcc/tree-vect-data-refs.c +++ b/gcc/tree-vect-data-refs.c @@ -305,9 +305,11 @@ vect_analyze_data_ref_dependence (struct data_dependence_relation *ddr, return false; /* We do not have to consider dependences between accesses that belong - to the same group. */ + to the same group, unless the stride could be smaller than the + group size. */ if (GROUP_FIRST_ELEMENT (stmtinfo_a) - && GROUP_FIRST_ELEMENT (stmtinfo_a) == GROUP_FIRST_ELEMENT (stmtinfo_b)) + && GROUP_FIRST_ELEMENT (stmtinfo_a) == GROUP_FIRST_ELEMENT (stmtinfo_b) + && !STMT_VINFO_STRIDED_P (stmtinfo_a)) return false; /* Even if we have an anti-dependence then, as the vectorized loop covers at |