Empty vector constructors are equivalent to zero vectors.  If we handle
that case directly, we can support it for variable-length vectors and
can hopefully make things more efficient for fixed-length vectors.

This is needed by a later C++ patch.

Tested on aarch64-linux-gnu and x86_64-linux-gnu.  OK to install?

Richard


2019-11-16  Richard Sandiford  <richard.sandif...@arm.com>

gcc/
        * tree.c (build_vector_from_ctor): Directly return a zero vector for
        empty constructors.

Index: gcc/tree.c
===================================================================
--- gcc/tree.c  2019-11-14 14:55:04.415447600 +0000
+++ gcc/tree.c  2019-11-16 13:53:28.609006588 +0000
@@ -1858,6 +1858,9 @@ make_vector (unsigned log2_npatterns,
 tree
 build_vector_from_ctor (tree type, vec<constructor_elt, va_gc> *v)
 {
+  if (vec_safe_length (v) == 0)
+    return build_zero_cst (type);
+
   unsigned HOST_WIDE_INT idx, nelts;
   tree value;
 

Reply via email to