Richard Biener <[email protected]> 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 <[email protected]>
>
> * 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;