aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2019-07-04 09:25:28 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2019-07-04 09:25:28 +0200
commit6f01ad76c11eacc9f32539f769e4cb3fd169466a (patch)
treec8b90243d826081d07f54eb5c96e4454122b6cfb
parent75da268e1a563a1a52389cd2ecee12d07c45a655 (diff)
downloadgcc-6f01ad76c11eacc9f32539f769e4cb3fd169466a.zip
gcc-6f01ad76c11eacc9f32539f769e4cb3fd169466a.tar.gz
gcc-6f01ad76c11eacc9f32539f769e4cb3fd169466a.tar.bz2
re PR tree-optimization/91063 (ICE in set_vinfo_for_stmt, at tree-vectorizer.c:676)
PR tree-optimization/91063 * tree-vect-stmts.c (vect_init_vector): Call gsi_remove to remove stmt from stmts sequence before calling vect_init_vector_1. Formatting fix. * gcc.dg/gomp/pr91063.c: New test. From-SVN: r273041
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/gomp/pr91063.c17
-rw-r--r--gcc/tree-vect-stmts.c10
4 files changed, 36 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 624cf76..99a653c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2019-07-04 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/91063
+ * tree-vect-stmts.c (vect_init_vector): Call gsi_remove to remove
+ stmt from stmts sequence before calling vect_init_vector_1.
+ Formatting fix.
+
2019-07-04 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org>
PR target/88833
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 5bcd7fb..9021bd7 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2019-07-04 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/91063
+ * gcc.dg/gomp/pr91063.c: New test.
+
2019-07-04 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org>
PR target/88833
diff --git a/gcc/testsuite/gcc.dg/gomp/pr91063.c b/gcc/testsuite/gcc.dg/gomp/pr91063.c
new file mode 100644
index 0000000..32938f3
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/gomp/pr91063.c
@@ -0,0 +1,17 @@
+/* PR tree-optimization/91063 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -fopenmp-simd" } */
+/* { dg-additional-options "-mavx512f" { target { i?86-*-* x86_64-*-* } } } */
+
+struct S { void *s; };
+
+int
+foo (struct S *x)
+{
+ int r = 0;
+ int i;
+#pragma omp simd reduction (+ : r)
+ for (i = 0; i < 64; ++i)
+ r += (int) (x->s != 0);
+ return r;
+}
diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c
index 313b1b9..ead079d 100644
--- a/gcc/tree-vect-stmts.c
+++ b/gcc/tree-vect-stmts.c
@@ -1496,15 +1496,19 @@ vect_init_vector (stmt_vec_info stmt_info, tree val, tree type,
promotion of invariant/external defs. */
val = gimple_convert (&stmts, TREE_TYPE (type), val);
for (gimple_stmt_iterator gsi2 = gsi_start (stmts);
- !gsi_end_p (gsi2); gsi_next (&gsi2))
- vect_init_vector_1 (stmt_info, gsi_stmt (gsi2), gsi);
+ !gsi_end_p (gsi2); )
+ {
+ init_stmt = gsi_stmt (gsi2);
+ gsi_remove (&gsi2, false);
+ vect_init_vector_1 (stmt_info, init_stmt, gsi);
+ }
}
}
val = build_vector_from_val (type, val);
}
new_temp = vect_get_new_ssa_name (type, vect_simple_var, "cst_");
- init_stmt = gimple_build_assign (new_temp, val);
+ init_stmt = gimple_build_assign (new_temp, val);
vect_init_vector_1 (stmt_info, init_stmt, gsi);
return new_temp;
}