This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Don't put conditional loads/stores into interleaved chains (PR tree-optimization/63563)


On Tue, 21 Oct 2014, Jakub Jelinek wrote:

> Hi!
> 
> This patch prevents conditional loads/stores to be added into interleaved
> groups (where it ICEs later on).
> 
> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk/4.9?

Ok.

Thanks,
Richard.

> 2014-10-21  Jakub Jelinek  <jakub@redhat.com>
> 
> 	PR tree-optimization/63563
> 	* tree-vect-data-refs.c (vect_analyze_data_ref_accesses): Bail out
> 	if either dra or drb stmts are not normal loads/stores.
> 
> 	* gcc.target/i386/pr63563.c: New test.
> 
> --- gcc/tree-vect-data-refs.c.jj	2014-10-03 10:10:42.000000000 +0200
> +++ gcc/tree-vect-data-refs.c	2014-10-20 15:21:47.938679992 +0200
> @@ -2551,11 +2551,14 @@ vect_analyze_data_ref_accesses (loop_vec
>  	     over them.  The we can just skip ahead to the next DR here.  */
>  
>  	  /* Check that the data-refs have same first location (except init)
> -	     and they are both either store or load (not load and store).  */
> +	     and they are both either store or load (not load and store,
> +	     not masked loads or stores).  */
>  	  if (DR_IS_READ (dra) != DR_IS_READ (drb)
>  	      || !operand_equal_p (DR_BASE_ADDRESS (dra),
>  				   DR_BASE_ADDRESS (drb), 0)
> -	      || !dr_equal_offsets_p (dra, drb))
> +	      || !dr_equal_offsets_p (dra, drb)
> +	      || !gimple_assign_single_p (DR_STMT (dra))
> +	      || !gimple_assign_single_p (DR_STMT (drb)))
>  	    break;
>  
>  	  /* Check that the data-refs have the same constant size and step.  */
> --- gcc/testsuite/gcc.target/i386/pr63563.c.jj	2014-10-20 15:27:17.713745577 +0200
> +++ gcc/testsuite/gcc.target/i386/pr63563.c	2014-10-20 15:27:57.637023020 +0200
> @@ -0,0 +1,17 @@
> +/* PR tree-optimization/63563 */
> +/* { dg-do compile } */
> +/* { dg-options "-O3 -mavx2" } */
> +
> +struct A { unsigned long a, b, c, d; } a[1024] = { { 0, 1, 2, 3 } }, b;
> +
> +void
> +foo (void)
> +{
> +  int i;
> +  for (i = 0; i < 1024; i++)
> +    {
> +      a[i].a = a[i].b = a[i].c = b.c;
> +      if (a[i].d)
> +	a[i].d = b.d;
> +    }
> +}
> 
> 	Jakub
> 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]