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 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 <[email protected]>
---
gcc/tree.cc | 17 +++++++----------
1 file changed, 7 insertions(+), 10 deletions(-)
diff --git a/gcc/tree.cc b/gcc/tree.cc
index ca713cec4d6a..e578001f103b 100644
--- a/gcc/tree.cc
+++ b/gcc/tree.cc
@@ -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 ();
--
2.54.0