Richard Biener via Gcc-patches <gcc-patches@gcc.gnu.org> writes:
> The following adjusts the tree.def documentation about VEC_PERM_EXPR
> which wasn't adjusted when the restrictions of permutes with constant
> mask were relaxed.

I was going to complain about having two copies of the documentation,
but then I realised that generic.texi doesn't document VEC_PERM_EXPR.
So... oops.

>
> OK?
>
> Thanks,
> Richard.
>
>       PR middle-end/110541
>       * tree.def (VEC_PERM_EXPR): Adjust documentation to reflect
>       reality.
> ---
>  gcc/tree.def | 19 +++++++++++++------
>  1 file changed, 13 insertions(+), 6 deletions(-)
>
> diff --git a/gcc/tree.def b/gcc/tree.def
> index 1fc2ca7a724..9e1a54ac2f9 100644
> --- a/gcc/tree.def
> +++ b/gcc/tree.def
> @@ -565,13 +565,20 @@ DEFTREECODE (VEC_COND_EXPR, "vec_cond_expr", 
> tcc_expression, 3)
>  
>     N = length(mask)
>     foreach i in N:
> -     M = mask[i] % (2*N)
> -     A = M < N ? v0[M] : v1[M-N]
> +     M = mask[i] % (length(v0) + length(v1))
> +     A[i] = M < length(v0) ? v0[M] : v1[M - length(v0)]
>  
> -   V0 and V1 are vectors of the same type.  MASK is an integer-typed
> -   vector.  The number of MASK elements must be the same with the
> -   number of elements in V0 and V1.  The size of the inner type
> -   of the MASK and of the V0 and V1 must be the same.
> +   V0 and V1 are vectors of the same type.
> +
> +   When MASK is not constant:
> +     MASK is an integer-typed vector.  The number of MASK elements must
> +     be the same with the number of elements in V0 and V1.  The size of

Preexisting, but s/same with/same as/

> +     the inner type of the MASK and of the V0 and V1 must be the same.
> +
> +   When MASK is constant:
> +     MASK is an integer-typed vector.   MASK elements outside of
> +     [0, length(V0) + length(V1) - 1] invoke undefined behavior (the
> +     modulo operation above doesn't apply).

I don't remember the last rule.  I thought the modulo did still apply.
(But the canonical form is to remove obvious modulo opportunities.)

E.g. a VLA reverse-and-rotate pattern might have { N-2, N-3, N-4, ... }.
That will wrap at the final position to 2N-1, but that seems OK.

LGTM otherwise FWIW.

Thanks,
Richard

Reply via email to