On Tue, Jun 23, 2026 at 3:24 PM Richard Sandiford
<[email protected]> wrote:
>
> Richard Biener <[email protected]> writes:
> > On Tue, Jun 23, 2026 at 12:54 PM Christopher Bazley via Sourceware
> > Forge <[email protected]> wrote:
> >>
> >> From: Christopher Bazley <[email protected]>
> >>
> >> 'nelts' is not the number of encoded elements in a VECTOR_CST; it
> >> is the number of patterns. Sometimes those interpretations coincide,
> >> as in the case of fixed length vector types (for which the number of
> >> elements per pattern is one), but not always.
> >>
> >> 'step' is not the step between the second and third element of
> >> a stepped pattern; it is the number of elements per pattern.
> >> This has led to confusion on the mailing list.
> >>
> >> Both variables are hereby renamed.
> >>
> >> gcc/ChangeLog:
> >>
> >> * tree.cc (build_vector_from_ctor): Rename variables.
> >> ---
> >> gcc/tree.cc | 16 ++++++++--------
> >> 1 file changed, 8 insertions(+), 8 deletions(-)
> >>
> >> diff --git a/gcc/tree.cc b/gcc/tree.cc
> >> index ca713cec4d6a..b4c836b4a0a7 100644
> >> --- a/gcc/tree.cc
> >> +++ b/gcc/tree.cc
> >> @@ -2201,23 +2201,23 @@ build_vector_from_ctor (tree type, const
> >> vec<constructor_elt, va_gc> *v)
> >> if (vec_safe_length (v) == 0)
> >> return build_zero_cst (type);
> >>
> >> - unsigned HOST_WIDE_INT idx, nelts, step = 1;
> >> + unsigned HOST_WIDE_INT idx, npatterns, nelts_per_pattern = 1;
> >> tree value;
> >>
> >> /* If the vector is a VLA, build a VLA constant vector. */
> >> - if (!TYPE_VECTOR_SUBPARTS (type).is_constant (&nelts))
> >> + if (!TYPE_VECTOR_SUBPARTS (type).is_constant (&npatterns))
> >
> > No, TYPE_VECTOR_SUBPARTS is the number of elements in 'type'.
>
> Yeah, but in this context it's being used to set up the parameters
> to tree_vector_builder. In other words, the name isn't describing
> where the information comes from, but rather what it ends up being
> used for.
>
> The current name "nelts" works here, but is at best misleading:
>
> >> {
> >> - nelts = constant_lower_bound (TYPE_VECTOR_SUBPARTS (type));
>
> ...here, and at worst wrong.
>
> So I thought the patch was ok, but I won't push for it if you disagree.
>
> >> - gcc_assert (vec_safe_length (v) <= nelts);
> >> - step = 2;
> >> + npatterns = constant_lower_bound (TYPE_VECTOR_SUBPARTS (type));
> >> + gcc_assert (vec_safe_length (v) <= npatterns);
> >> + nelts_per_pattern = 2;
> >> }
>
> In case this seems more palatable, I suppose another way of writing this
> would be:
>
> npatterns = constant_lower_bound (TYPE_VECTOR_SUBPARTS (type));
> nelts_per_pattern = TYPE_VECTOR_SUBPARTS (type).is_constant () ? 1 : 2;
> gcc_assert (vec_safe_length (v) <= npatterns);
>
> without the "if".
Yeah, I think that's less confusing. OK with that change.
> Or we could just use nelts_per_pattern==2 unconditionally
> (with some wasted work for VLS).
>
> Thanks,
> Richard
>
> >>
> >> - tree_vector_builder vec (type, nelts, step);
> >> + tree_vector_builder vec (type, npatterns, nelts_per_pattern);
> >> FOR_EACH_CONSTRUCTOR_VALUE (v, idx, value)
> >> {
> >> if (TREE_CODE (value) == VECTOR_CST)
> >> {
> >> - /* If NELTS is constant then this must be too. */
> >> + /* If NPATTERNS is constant then this must be too. */
> >> unsigned int sub_nelts = VECTOR_CST_NELTS (value).to_constant ();
> >> for (unsigned i = 0; i < sub_nelts; ++i)
> >> vec.quick_push (VECTOR_CST_ELT (value, i));
> >> @@ -2225,7 +2225,7 @@ build_vector_from_ctor (tree type, const
> >> vec<constructor_elt, va_gc> *v)
> >> else
> >> vec.quick_push (value);
> >> }
> >> - while (vec.length () < nelts * step)
> >> + while (vec.length () < npatterns * nelts_per_pattern)
> >> vec.quick_push (build_zero_cst (TREE_TYPE (type)));
> >>
> >> return vec.build ();
> >> --
> >> 2.54.0
> >>