aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIra Rosen <irar@il.ibm.com>2009-04-20 11:26:18 +0000
committerIra Rosen <irar@gcc.gnu.org>2009-04-20 11:26:18 +0000
commitc4551b28a74c661f07943831640d2378c2f1277e (patch)
tree255ffce85d7e7ebbe01b2d25d96680caf2b7a014
parentecc3905a2df096b31501be93eb527c826fbe1219 (diff)
downloadgcc-c4551b28a74c661f07943831640d2378c2f1277e.zip
gcc-c4551b28a74c661f07943831640d2378c2f1277e.tar.gz
gcc-c4551b28a74c661f07943831640d2378c2f1277e.tar.bz2
re PR tree-optimization/39675 (ICE in vect_get_vec_def_for_operand, at tree-vect-transform.c:1999)
PR tree-optimization/39675 * tree-vect-loop.c (vect_transform_loop): Remove currently redundant check of the return code of vect_schedule_slp. Check that stmt_vec_info still exists for the statement, before checking its vectorization type. From-SVN: r146399
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/vect/O3-pr39675-2.c32
-rw-r--r--gcc/tree-vect-loop.c13
4 files changed, 46 insertions, 11 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ebb4d37..7d962a6 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2009-04-20 Ira Rosen <irar@il.ibm.com>
+
+ PR tree-optimization/39675
+ * tree-vect-loop.c (vect_transform_loop): Remove currently redundant
+ check of the return code of vect_schedule_slp. Check that stmt_vec_info
+ still exists for the statement, before checking its vectorization type.
+
2009-04-20 Michael Matz <matz@suse.de>
* Makefile.in (generated_files): Take out $(simple_generated_c).
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index df0281d..96442c5 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2009-04-20 Ira Rosen <irar@il.ibm.com>
+
+ PR tree-optimization/39675
+ * gcc.dg/vect/O3-pr39675-2.c: New test.
+
2009-04-20 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/rep_clause3.adb: New test.
diff --git a/gcc/testsuite/gcc.dg/vect/O3-pr39675-2.c b/gcc/testsuite/gcc.dg/vect/O3-pr39675-2.c
new file mode 100644
index 0000000..7d6af7b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/O3-pr39675-2.c
@@ -0,0 +1,32 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target vect_int } */
+
+#define N 128
+
+int out[N*4], out2[N], in[N*4];
+
+void
+foo ()
+{
+ int i, a0, a1, a2, a3;
+
+ for (i = 0; i < N; i++)
+ {
+ a0 = in[i*4];
+ a1 = in[i*4 + 1];
+ a2 = in[i*4 + 2];
+ a3 = in[i*4 + 3];
+
+ out[i*4] = a0;
+ out[i*4 + 1] = a1;
+ out[i*4 + 2] = a2;
+ out[i*4 + 3] = a3;
+
+ out2[i] = a0;
+ }
+}
+
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided_wide } } } */
+/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { target vect_strided_wide } } } */
+/* { dg-final { cleanup-tree-dump "vect" } } */
+
diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c
index d78fa99..ee54cac 100644
--- a/gcc/tree-vect-loop.c
+++ b/gcc/tree-vect-loop.c
@@ -3528,20 +3528,11 @@ vect_transform_loop (loop_vec_info loop_vinfo)
if (vect_print_dump_info (REPORT_DETAILS))
fprintf (vect_dump, "=== scheduling SLP instances ===");
- is_store = vect_schedule_slp (loop_vinfo);
-
- /* IS_STORE is true if STMT is a store. Stores cannot be of
- hybrid SLP type. They are removed in
- vect_schedule_slp_instance and their vinfo is destroyed. */
- if (is_store)
- {
- gsi_next (&si);
- continue;
- }
+ vect_schedule_slp (loop_vinfo);
}
/* Hybrid SLP stmts must be vectorized in addition to SLP. */
- if (PURE_SLP_STMT (stmt_info))
+ if (!vinfo_for_stmt (stmt) || PURE_SLP_STMT (stmt_info))
{
gsi_next (&si);
continue;