+2020-01-15 Richard Sandiford <richard.sandiford@arm.com>
+
+ PR tree-optimization/93247
+ * tree-vect-loop.c (update_epilogue_loop_vinfo): Check the access
+ type of the stmt that we're going to vectorize.
+
2020-01-15 Richard Sandiford <richard.sandiford@arm.com>
* tree-vect-slp.c (vectorize_slp_instance_root_stmt): Use a
+2020-01-15 Richard Sandiford <richard.sandiford@arm.com>
+
+ PR tree-optimization/93247
+ * gcc.dg/vect/pr93247-1.c: New test.
+ * gcc.dg/vect/pr93247-2.c: Likewise.
+
2020-01-15 Martin Sebor <msebor@redhat.com>
* gcc.dg/Wstringop-overflow-17.c: Tweak test to avoid unrelated
--- /dev/null
+/* { dg-do compile } */
+/* { dg-additional-options "-march=skylake" { target x86_64-*-* i?86-*-* } } */
+
+typedef struct {
+ unsigned num;
+} VEC_tree_base;
+
+enum {
+ LTO_DECL_STREAM_NAMESPACE_DECL,
+ LTO_DECL_STREAM_LABEL_DECL,
+ LTO_N_DECL_STREAMS
+};
+
+struct lto_tree_ref_encoder {
+ VEC_tree_base *trees;
+} typedef *lto_out_decl_state_ptr;
+
+typedef struct {
+ lto_out_decl_state_ptr vec[1];
+} VEC_lto_out_decl_state_ptr_base;
+
+VEC_lto_out_decl_state_ptr_base *a;
+int f;
+long g;
+int
+fn1(struct lto_tree_ref_encoder *p1) {
+ int i;
+ long b;
+ i = 0;
+ for (; i < LTO_N_DECL_STREAMS; i++) {
+ struct lto_tree_ref_encoder c = *p1;
+ int d;
+ VEC_tree_base *e = c.trees;
+ d = e ? e->num : 0;
+ b += d;
+ }
+ return b;
+}
+int
+fn2() {
+ lto_out_decl_state_ptr h;
+ struct lto_tree_ref_encoder j;
+ unsigned k;
+ for (; k < f; k++) {
+ h = a->vec[k];
+ j = *h;
+ g += fn1(&j);
+ }
+}
--- /dev/null
+/* { dg-do compile } */
+/* { dg-additional-options "-march=skylake-avx512" { target x86_64-*-* i?86-*-* } } */
+
+int
+foo (int *a, double *b, int *c)
+{
+ int f, g = 0;
+ for (f = 0; f < 100; f++)
+ if (b[f] && c[a[f]])
+ g++;
+ return g;
+}
updated offset we set using ADVANCE. Instead we have to make sure the
reference in the data references point to the corresponding copy of
the original in the epilogue. */
- if (STMT_VINFO_MEMORY_ACCESS_TYPE (stmt_vinfo) == VMAT_GATHER_SCATTER)
+ if (STMT_VINFO_MEMORY_ACCESS_TYPE (vect_stmt_to_vectorize (stmt_vinfo))
+ == VMAT_GATHER_SCATTER)
{
DR_REF (dr)
= simplify_replace_tree (DR_REF (dr), NULL_TREE, NULL_TREE,