]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Fix confusing variable names in build_vector_from_ctor
authorChristopher Bazley <chris.bazley@arm.com>
Tue, 23 Jun 2026 10:36:10 +0000 (10:36 +0000)
committerChristopher Bazley <chris.bazley@arm.com>
Tue, 30 Jun 2026 11:38:31 +0000 (11:38 +0000)
'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 and the code that assigns their
values refactored to be more palatable.

gcc/ChangeLog:

* tree.cc (build_vector_from_ctor): Rename variables and
refactor assignments.

Co-authored-by: Richard Sandiford <rdsandiford@googlemail.com>
gcc/tree.cc

index 90c8f2a35ea4716a43d5e7fe0f004d9fdd1cda2a..411752d14636dd1e5bfa9d366bab10cb3ad8e845 100644 (file)
@@ -2201,23 +2201,20 @@ 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;
   tree value;
 
   /* If the vector is a VLA, build a VLA constant vector.  */
-  if (!TYPE_VECTOR_SUBPARTS (type).is_constant (&nelts))
-    {
-      nelts = constant_lower_bound (TYPE_VECTOR_SUBPARTS (type));
-      gcc_assert (vec_safe_length (v) <= nelts);
-      step = 2;
-    }
+  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);
 
-  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 +2222,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 ();