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.
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 + 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). */ DEFTREECODE (VEC_PERM_EXPR, "vec_perm_expr", tcc_expression, 3) -- 2.35.3