aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorCong Hou <congh@google.com>2014-02-03 13:15:56 -0500
committerCong Hou <congh@gcc.gnu.org>2014-02-03 13:15:56 -0500
commitcf5b2be2a4b13c3fb806033840581cd02080375c (patch)
treec169424d5d8cdcbdf3aa71e42ddf34256bc75463 /gcc
parente3aaedd6bf3a5c7e7b88802bcb135fd842b3e655 (diff)
downloadgcc-cf5b2be2a4b13c3fb806033840581cd02080375c.zip
gcc-cf5b2be2a4b13c3fb806033840581cd02080375c.tar.gz
gcc-cf5b2be2a4b13c3fb806033840581cd02080375c.tar.bz2
re PR tree-optimization/60000 (GCC trunk build failure caused by the vectorizer)
2014-02-03 Cong Hou <congh@google.com> PR tree-optimization/60000 * tree-vect-loop.c (vect_transform_loop): Set pattern_def_seq to NULL if the vectorized statement is a store. A store statement can only appear at the end of pattern statements. 2014-02-03 Cong Hou <congh@google.com> PR tree-optimization/60000 * g++.dg/vect/pr60000.cc: New test. From-SVN: r207433
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/vect/pr60000.cc13
-rw-r--r--gcc/tree-vect-loop.c9
4 files changed, 30 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5938f54..f3ebc0c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2014-02-03 Cong Hou <congh@google.com>
+
+ PR tree-optimization/60000
+ * tree-vect-loop.c (vect_transform_loop): Set pattern_def_seq to NULL
+ if the vectorized statement is a store. A store statement can only
+ appear at the end of pattern statements.
+
2014-02-03 H.J. Lu <hongjiu.lu@intel.com>
* config/i386/i386.c (flag_opts): Add -mlong-double-128.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index d87b06e..d896017 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2014-02-03 Cong Hou <congh@google.com>
+
+ PR tree-optimization/60000
+ * g++.dg/vect/pr60000.cc: New test.
+
2014-02-03 H.J. Lu <hongjiu.lu@intel.com>
* gcc.target/i386/long-double-64-1.c: Verify __multf3 isn't used.
diff --git a/gcc/testsuite/g++.dg/vect/pr60000.cc b/gcc/testsuite/g++.dg/vect/pr60000.cc
new file mode 100644
index 0000000..fe39d6a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/vect/pr60000.cc
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-additional-options "-fno-tree-vrp" } */
+
+void foo (bool* a, int* b)
+{
+ for (int i = 0; i < 1000; ++i)
+ {
+ a[i] = i % 2;
+ b[i] = i % 3;
+ }
+}
+
+/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c
index 2bb9fbd..eb7ecb6 100644
--- a/gcc/tree-vect-loop.c
+++ b/gcc/tree-vect-loop.c
@@ -6054,7 +6054,6 @@ vect_transform_loop (loop_vec_info loop_vinfo)
the chain. */
gsi_next (&si);
vect_remove_stores (GROUP_FIRST_ELEMENT (stmt_info));
- continue;
}
else
{
@@ -6064,11 +6063,13 @@ vect_transform_loop (loop_vec_info loop_vinfo)
unlink_stmt_vdef (store);
gsi_remove (&si, true);
release_defs (store);
- continue;
}
- }
- if (!transform_pattern_stmt && gsi_end_p (pattern_def_si))
+ /* Stores can only appear at the end of pattern statements. */
+ gcc_assert (!transform_pattern_stmt);
+ pattern_def_seq = NULL;
+ }
+ else if (!transform_pattern_stmt && gsi_end_p (pattern_def_si))
{
pattern_def_seq = NULL;
gsi_next (&si);