[PATCH] Don't use vec_duplicate on vector in CTOR expansion

Richard Biener rguenther@suse.de
Sat Jul 3 06:28:34 GMT 2021


On July 2, 2021 7:12:15 PM GMT+02:00, "H.J. Lu" <hjl.tools@gmail.com> wrote:
>Since vec_duplicate only works on scalar, don't use it on vector in
>store constructor expansion.

OK. 

Richard. 

>gcc/
>
>	PR middle-end/101294
>	* expr.c (store_constructor): Don't use vec_duplicate on vector.
>
>gcc/testsuite/
>
>	PR middle-end/101294
>	* gcc.dg/pr101294.c: New test.
>---
> gcc/expr.c                      |  3 ++-
> gcc/testsuite/gcc.dg/pr101294.c | 15 +++++++++++++++
> 2 files changed, 17 insertions(+), 1 deletion(-)
> create mode 100644 gcc/testsuite/gcc.dg/pr101294.c
>
>diff --git a/gcc/expr.c b/gcc/expr.c
>index 025033c9ecf..bd85bbfdd6f 100644
>--- a/gcc/expr.c
>+++ b/gcc/expr.c
>@@ -7078,7 +7078,8 @@ store_constructor (tree exp, rtx target, int
>cleared, poly_int64 size,
> 	    && eltmode == GET_MODE_INNER (mode)
> 	    && ((icode = optab_handler (vec_duplicate_optab, mode))
> 		!= CODE_FOR_nothing)
>-	    && (elt = uniform_vector_p (exp)))
>+	    && (elt = uniform_vector_p (exp))
>+	    && !VECTOR_TYPE_P (TREE_TYPE (elt)))
> 	  {
> 	    class expand_operand ops[2];
> 	    create_output_operand (&ops[0], target, mode);
>diff --git a/gcc/testsuite/gcc.dg/pr101294.c
>b/gcc/testsuite/gcc.dg/pr101294.c
>new file mode 100644
>index 00000000000..ca59b35f4be
>--- /dev/null
>+++ b/gcc/testsuite/gcc.dg/pr101294.c
>@@ -0,0 +1,15 @@
>+/* PR middle-end/101294 */
>+/* { dg-do compile } */
>+/* { dg-options "-O0" } */
>+/* { dg-additional-options "-mavx" { target avx } } */
>+
>+typedef __attribute__((__vector_size__ (sizeof (unsigned long long))))
>unsigned long long U;
>+typedef __attribute__((__vector_size__ (4 * sizeof (unsigned long
>long)))) unsigned long long V;
>+
>+extern U x;
>+
>+void
>+foo (void)
>+{
>+  x = __builtin_shufflevector ((U){}, (V){}, 3);
>+}



More information about the Gcc-patches mailing list