On Tue, 8 Jan 2019, Jakub Jelinek wrote:

> Hi!
> 
> As mentioned in the PR, if a VECTOR_CST is not VECTOR_CST_STEPPED_P,
> it is sufficient to recurse just on all the encoded elt, because if
> the vector has more elts than encoded, all the remaining ones are equal to
> the last one.
> But, if it is stepped, there is the possibility that while the penultimate
> and last encoded elt could be zero or one, the first non-encoded one could
> be two or minus one.
> 
> The patch as committed is doing:
>         unsigned HOST_WIDE_INT nelts = vector_cst_encoded_nelts (expr);
>         if (VECTOR_CST_STEPPED_P (expr)
>             && !TYPE_VECTOR_SUBPARTS (TREE_TYPE (expr)).is_constant (&nelts))
>           return false;
> so if it is stepped, it updates nelts to the subparts count and thus
> attempts to verify all elts rather than just the encoded ones.  But that
> fails because VECTOR_CST_ENCODED_ELT can't really access the non-encoded
> ones.  The following patch fixes it by using vector_cst_elt there instead,
> for the encoded elt it just returns VECTOR_CST_ENCODED_ELT immediately and
> for the next value it will likely fail the predicate.
> 
> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

OK.

Richard.

> 2019-01-08  Jelinek  <ja...@redhat.com>
> 
>       PR middle-end/88758
>       * tree.c (initializer_each_zero_or_onep) <case VECTOR_CST>: Use
>       vector_cst_elt instead of VECTOR_CST_ENCODED_ELT.
> 
> --- gcc/tree.c.jj     2019-01-07 17:59:22.883951743 +0100
> +++ gcc/tree.c        2019-01-08 18:15:01.956087119 +0100
> @@ -11255,7 +11255,7 @@ initializer_each_zero_or_onep (const_tre
>  
>       for (unsigned int i = 0; i < nelts; ++i)
>         {
> -         tree elt = VECTOR_CST_ENCODED_ELT (expr, i);
> +         tree elt = vector_cst_elt (expr, i);
>           if (!initializer_each_zero_or_onep (elt))
>             return false;
>         }
> 
>       Jakub
> 
> 

-- 
Richard Biener <rguent...@suse.de>
SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 
21284 (AG Nuernberg)

Reply via email to