On February 1, 2014 12:06:55 AM GMT+01:00, Cong Hou <co...@google.com> wrote: >On Fri, Jan 31, 2014 at 5:06 AM, Jakub Jelinek <ja...@redhat.com> >wrote: >> >> On Fri, Jan 31, 2014 at 09:41:59AM +0100, Richard Biener wrote: >> > Is that because si and pattern_def_si point to the same stmts? >Then >> > I'd prefer to do >> > >> > if (is_store) >> > { >> > ... >> > pattern_def_seq = NULL; >> > } >> > else if (!transform_pattern_stmt && gsi_end_p (pattern_def_si)) >> > { >> > pattern_def_seq = NULL; >> > gsi_next (&si); >> > } >> >> Yeah, I think stores can only appear at the end of patterns, so IMHO >it should be >> safe to just clear pattern_def_seq always in that case. Right now >the code >> has continue; separately for STMT_VINFO_GROUPED_ACCESS (stmt_info) >and >> for !STMT_VINFO_GROUPED_ACCESS (stmt_info) stores, but I guess you >should >> just move them at the end of if (is_store) and clear pattern_def_seq >there >> before the continue. Add gcc_assert (!transform_pattern_stmt); too? > > >I agree. I have updated the patch accordingly. Bootstrapped and tested >on x86_64. OK for the trunk?
Ok. Thanks, Richard. >thanks, >Cong > > > > >diff --git a/gcc/ChangeLog b/gcc/ChangeLog >index 95a324c..cabcaf8 100644 >--- a/gcc/ChangeLog >+++ b/gcc/ChangeLog >@@ -1,3 +1,10 @@ >+2014-01-30 Cong Hou <co...@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-01-27 Jakub Jelinek <ja...@redhat.com> > > PR bootstrap/59934 >diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog >index fa61d5c..f2ce70f 100644 >--- a/gcc/testsuite/ChangeLog >+++ b/gcc/testsuite/ChangeLog >@@ -1,3 +1,8 @@ >+2014-01-30 Cong Hou <co...@google.com> >+ >+ PR tree-optimization/60000 >+ * g++.dg/vect/pr60000.cc: New test. >+ > 2014-01-27 Christian Bruel <christian.br...@st.com> > > * gcc.target/sh/torture/strncmp.c: New tests. >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 69c8d21..0e162cb 100644 >--- a/gcc/tree-vect-loop.c >+++ b/gcc/tree-vect-loop.c >@@ -6053,7 +6053,6 @@ vect_transform_loop (loop_vec_info loop_vinfo) > the chain. */ > gsi_next (&si); > vect_remove_stores (GROUP_FIRST_ELEMENT (stmt_info)); >- continue; > } > else > { >@@ -6063,11 +6062,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); > > > > > >> >> >> Jakub