Add an empty constructor shortcut to build_vector_from_ctor
authorRichard Sandiford <richard.sandiford@arm.com>
Mon, 18 Nov 2019 15:29:53 +0000 (15:29 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Mon, 18 Nov 2019 15:29:53 +0000 (15:29 +0000)
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.

2019-11-18  Richard Sandiford  <richard.sandiford@arm.com>

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

From-SVN: r278413

gcc/ChangeLog
gcc/tree.c

index 4198461c74e079282217e283ac5397f64bfc4fce..be2fac770ee7f5e91d78c8cefdf552848af6f7d1 100644 (file)
@@ -1,3 +1,8 @@
+2019-11-18  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * tree.c (build_vector_from_ctor): Directly return a zero vector for
+       empty constructors.
+
 2019-11-18  Richard Sandiford  <richard.sandiford@arm.com>
 
        * cse.c (cse_insn): Delete no-op register moves too.
index 4db3fa8ee6c9135e5250341a1dc6e8c9783c4368..f9ea79d179963391377134a6389c2fa1c61b50ea 100644 (file)
@@ -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;