Richard Biener <rguent...@suse.de> writes:
> This avoids unsharing the SLP tree when optimizing load permutations
> for reductions but there is no actual permute taking place.
>
> Bootstrapped and tested on x86_64-unknown-linux-gnu, pushed.
>
> 2020-09-09  Richard Biener  <rguent...@suse.de>
>
>       * tree-vect-slp.c (vect_attempt_slp_rearrange_stmts): Do
>       nothing when the permutation doesn't permute.

Drive-by comment, sorry for not looking in more detail first, but:
is there a difference in semantics between an identity load_permutation
and a null load_permutation?  Seems like it would be good to have
a canonical form.

Thanks,
Richard

> ---
>  gcc/tree-vect-slp.c | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/gcc/tree-vect-slp.c b/gcc/tree-vect-slp.c
> index 03b11058bd5..15d57890b6f 100644
> --- a/gcc/tree-vect-slp.c
> +++ b/gcc/tree-vect-slp.c
> @@ -1905,11 +1905,14 @@ vect_attempt_slp_rearrange_stmts (slp_instance 
> slp_instn)
>      }
>  
>    /* Check that the loads in the first sequence are different and there
> -     are no gaps between them.  */
> +     are no gaps between them and that there is an actual permutation.  */
> +  bool any_permute = false;
>    auto_sbitmap load_index (group_size);
>    bitmap_clear (load_index);
>    FOR_EACH_VEC_ELT (node->load_permutation, i, lidx)
>      {
> +      if (lidx != i)
> +     any_permute = true;
>        if (lidx >= group_size)
>       return false;
>        if (bitmap_bit_p (load_index, lidx))
> @@ -1917,6 +1920,8 @@ vect_attempt_slp_rearrange_stmts (slp_instance 
> slp_instn)
>  
>        bitmap_set_bit (load_index, lidx);
>      }
> +  if (!any_permute)
> +    return false;
>    for (i = 0; i < group_size; i++)
>      if (!bitmap_bit_p (load_index, i))
>        return false;

Reply via email to