On Mon, Apr 16, 2018 at 6:16 PM, Andreas Krebbel
<kreb...@linux.vnet.ibm.com> wrote:
> I did run into an ICE with a single element vector triggered by
> dividing the number of elements by 2 with exact_div here:
>
> tree-vect-data-refs.c:5132
>
>       else
>         {
>           /* If length is not equal to 3 then only power of 2 is supported.  
> */
>           gcc_assert (pow2p_hwi (count));
>           poly_uint64 nelt = GET_MODE_NUNITS (mode);
>
>           /* The encoding has 2 interleaved stepped patterns.  */
>           vec_perm_builder sel (nelt, 2, 3);
>           sel.quick_grow (6);
>           for (i = 0; i < 3; i++)
>             {
>               sel[i * 2] = i;
>               sel[i * 2 + 1] = i + nelt;
>             }
>           vec_perm_indices indices (sel, 2, nelt);
>           if (can_vec_perm_const_p (mode, indices))
>             {
>               for (i = 0; i < 6; i++)
>                 sel[i] += exact_div (nelt, 2);    <-----
>               indices.new_vector (sel, 2, nelt);
>               if (can_vec_perm_const_p (mode, indices))
>                 return true;
>             }
>         }
>
> The patch adds a check to prevent this.

Testcase?

What's the group size?

Did it work before the poly-int stuff?  Single-element vectors are
somewhat "special" - where do they appear for you?

Richard.

> Ok?
>
> -Andreas-
>
> gcc/ChangeLog:
>
> 2018-04-16  Andreas Krebbel  <kreb...@linux.ibm.com>
>
>         * tree-vect-data-refs.c (vect_grouped_store_supported): Exit for
>         single element vectors.
> ---
>  gcc/tree-vect-data-refs.c | 3 +++
>  1 file changed, 3 insertions(+)
>
> diff --git a/gcc/tree-vect-data-refs.c b/gcc/tree-vect-data-refs.c
> index 161a886..01e28ca 100644
> --- a/gcc/tree-vect-data-refs.c
> +++ b/gcc/tree-vect-data-refs.c
> @@ -5135,6 +5135,9 @@ vect_grouped_store_supported (tree vectype, unsigned 
> HOST_WIDE_INT count)
>           gcc_assert (pow2p_hwi (count));
>           poly_uint64 nelt = GET_MODE_NUNITS (mode);
>
> +         if (maybe_eq (nelt, 1U))
> +           return false;
> +
>           /* The encoding has 2 interleaved stepped patterns.  */
>           vec_perm_builder sel (nelt, 2, 3);
>           sel.quick_grow (6);
> --
> 2.9.1
>

Reply via email to