On Mon, 13 Feb 2012, Jakub Jelinek wrote:

> Hi!
> 
> The PR50912 changed vect_get_and_check_slp_defs dt from
> array into scalar, which fails when calling vect_model_simple_cost
> which looks at two array members.  I believe even 4.6 checked just
> the first operand, as it called it when processing the first operand,
> so IMHO this patch doesn't regress (the very incomplete) cost model
> handling and doesn't introduce undefined behavior.
> 
> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

Ok.

Thanks,
Richard.

> 2012-02-13  Jakub Jelinek  <ja...@redhat.com>
> 
>       PR tree-optimization/52210
>       * tree-vect-slp.c (vect_get_and_check_slp_defs): Call
>       vect_model_simple_cost with two entry vect_def_type array instead
>       of an address of dt.
> 
>       * gcc.dg/pr52210.c: New test.
> 
> --- gcc/tree-vect-slp.c.jj    2012-02-07 16:05:51.000000000 +0100
> +++ gcc/tree-vect-slp.c       2012-02-13 10:14:28.017357662 +0100
> @@ -321,10 +321,15 @@ vect_get_and_check_slp_defs (loop_vec_in
>                  vect_model_store_cost (stmt_info, ncopies_for_cost, false,
>                                          dt, slp_node);
>             else
> -             /* Not memory operation (we don't call this function for
> -                loads).  */
> -             vect_model_simple_cost (stmt_info, ncopies_for_cost, &dt,
> -                                     slp_node);
> +             {
> +               enum vect_def_type dts[2];
> +               dts[0] = dt;
> +               dts[1] = vect_uninitialized_def;
> +               /* Not memory operation (we don't call this function for
> +                  loads).  */
> +               vect_model_simple_cost (stmt_info, ncopies_for_cost, dts,
> +                                       slp_node);
> +             }
>           }
>       }
>        else
> --- gcc/testsuite/gcc.dg/pr52210.c.jj 2012-02-13 10:27:46.692809216 +0100
> +++ gcc/testsuite/gcc.dg/pr52210.c    2012-02-13 10:25:31.000000000 +0100
> @@ -0,0 +1,12 @@
> +/* PR tree-optimization/52210 */
> +/* { dg-do compile } */
> +/* { dg-options "-O3" } */
> +
> +void
> +foo (long *x, long y, long z)
> +{
> +  long a = x[0];
> +  long b = x[1];
> +  x[0] = a & ~y;
> +  x[1] = b & ~z;
> +}
> 
>       Jakub
> 
> 

-- 
Richard Guenther <rguent...@suse.de>
SUSE / SUSE Labs
SUSE LINUX Products GmbH - Nuernberg - AG Nuernberg - HRB 16746
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer

Reply via email to