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


Reply via email to