+2018-05-02 Richard Sandiford <richard.sandiford@linaro.org>
+
+ 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.
+
2018-05-02 Tom de Vries <tom@codesourcery.com>
PR lto/85451
+2018-05-02 Richard Sandiford <richard.sandiford@linaro.org>
+
+ PR tree-optimization/85586
+ * gcc.dg/vect/pr85586.c: New test.
+
2018-05-01 Marc Glisse <marc.glisse@inria.fr>
PR tree-optimization/85143
--- /dev/null
+#define N 100
+
+void __attribute__ ((noipa))
+foo (int *out, int *in, int step)
+{
+ for (int i = 0; i < N; ++i)
+ {
+ out[0] = in[i];
+ out[1] = 2;
+ out += step;
+ }
+}
+
+int in[N];
+int out[N * 2];
+
+int
+main (void)
+{
+ for (int i = 0; i < N; ++i)
+ {
+ in[i] = i * (i + 1);
+ asm volatile ("" ::: "memory");
+ }
+
+ foo (out, in, 1);
+ for (int i = 0; i < N; ++i)
+ if (out[i] != in[i])
+ __builtin_abort ();
+ if (out[N] != 2)
+ __builtin_abort ();
+
+ foo (out + N - 1, in, -1);
+ if (out[0] != in[N - 1])
+ __builtin_abort ();
+ for (int i = 1; i <= N; ++i)
+ if (out[i] != 2)
+ __builtin_abort ();
+
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "LOOP VECTORIZED" 1 "vect" { target vect_int } } } */
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