On Wed, 5 Jul 2023, Richard Sandiford wrote:
> Richard Biener via Gcc-patches <[email protected]> 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.
Yeah, also noticed that ...
> >
> > 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/
Fixed.
> > + 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.
OK, I'll remove that sentence.
Pushed as follows.
Richard.
>From 38f2d33e5119e6ae39f2702caced7e9b224cbc4f Mon Sep 17 00:00:00 2001
From: Richard Biener <[email protected]>
Date: Wed, 5 Jul 2023 08:53:01 +0200
Subject: [PATCH] middle-end/110541 - VEC_PERM_EXPR documentation is off
To: [email protected]
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.
PR middle-end/110541
* tree.def (VEC_PERM_EXPR): Adjust documentation to reflect
reality.
---
gcc/tree.def | 17 +++++++++++------
1 file changed, 11 insertions(+), 6 deletions(-)
diff --git a/gcc/tree.def b/gcc/tree.def
index 1fc2ca7a724..be94b7ece0a 100644
--- a/gcc/tree.def
+++ b/gcc/tree.def
@@ -565,13 +565,18 @@ 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 as 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.
+
+ When MASK is constant:
+ MASK is an integer-typed vector.
*/
DEFTREECODE (VEC_PERM_EXPR, "vec_perm_expr", tcc_expression, 3)
--
2.35.3