Richard,

Could you please review additional simple fix for 70729 - we need to
nullify safelen field of loops containing simduid intrinsics like
GOMP_SIMD_LANE (introduced  e.g. for private variables). I checked
that this fix cures regression which was missed by me since AVX2
machine is required for  libgomp.fortran/examples-4/simd-2.f90.

Regression testing and bootstrapping did not show any new failures.
Is it OK for trunk?

Patch:
diff --git a/gcc/tree-vectorizer.c b/gcc/tree-vectorizer.c
index 2669813..9fbd183 100644
--- a/gcc/tree-vectorizer.c
+++ b/gcc/tree-vectorizer.c
@@ -204,6 +204,10 @@ adjust_simduid_builtins (hash_table<simduid_to_vf> *htab)
   gcc_assert (TREE_CODE (arg) == SSA_NAME);
   simduid_to_vf *p = NULL, data;
   data.simduid = DECL_UID (SSA_NAME_VAR (arg));
+  /* Need to nullify loop safelen field since it's value is not
+     valid after transformation.  */
+  if (bb->loop_father && bb->loop_father->safelen > 0)
+    bb->loop_father->safelen = 0;
   if (htab)
     {
       p = htab->find (&data);

ChangeLog:
2016-06-30  Yuri Rumyantsev  <ysrum...@gmail.com>

PR tree-optimization/70729
* tree-vectorizer.c (adjust_simduid_builtins): Nullify safelen field
of loop since it can be not valid after transformation.

2016-06-30 17:28 GMT+03:00 Jakub Jelinek <ja...@redhat.com>:
> On Thu, Jun 30, 2016 at 04:25:16PM +0200, Thomas Schwinge wrote:
>> Hi!
>>
>> On Thu, 30 Jun 2016 16:48:25 +0300, Yuri Rumyantsev <ysrum...@gmail.com> 
>> wrote:
>> > Thanks for your help.
>> > Could you please look at the following simple patch which cures
>> > regression - we need to nullify loop safelen  field in
>> > adjust_simduid_builtins:
>> >
>> > diff --git a/gcc/tree-vectorizer.c b/gcc/tree-vectorizer.c
>> > index 2669813..f70380c 100644
>> > --- a/gcc/tree-vectorizer.c
>> > +++ b/gcc/tree-vectorizer.c
>> > @@ -204,6 +204,10 @@ adjust_simduid_builtins (hash_table<simduid_to_vf> 
>> > *htab)
>> >           gcc_assert (TREE_CODE (arg) == SSA_NAME);
>> >           simduid_to_vf *p = NULL, data;
>> >           data.simduid = DECL_UID (SSA_NAME_VAR (arg));
>> > +         /* Need to nullify safelen fielf of loop since it's vale is not
>> > +            valid after transformation.  */
>
> s/fielf/field/
> s/vale/value/
>
>> > +         if (bb->loop_father && bb->loop_father->safelen > 0)
>> > +           bb->loop_father->safelen = 0;
>> >           if (htab)
>> >             {
>> >               p = htab->find (&data);
>
>         Jakub

Reply via email to