From: Aldy Hernandez Date: Mon, 5 May 2003 20:31:45 +0000 (+0000) Subject: simd-6.c: New. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=9938b5d971c49e642b6050e427ba4e5816cec7d9;p=gcc.git simd-6.c: New. 2003-05-05 Aldy Hernandez * testsuite/gcc.c-torture/compile/simd-6.c: New. * c-typeck.c (digest_init): Handle arrays of vector constants. From-SVN: r66501 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 573ec59e6e7..3cf8d08105c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2003-05-05 Aldy Hernandez + + * testsuite/gcc.c-torture/compile/simd-6.c: New. + + * c-typeck.c (digest_init): Handle arrays of vector constants. + 2003-05-05 Jakub Jelinek * builtins.c (expand_builtin_mempcpy): New function. diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c index 23b7d2da970..c4e482ee240 100644 --- a/gcc/c-typeck.c +++ b/gcc/c-typeck.c @@ -4787,10 +4787,17 @@ digest_init (type, init, require_constant) /* Build a VECTOR_CST from a *constant* vector constructor. If the vector constructor is not constant (e.g. {1,2,3,foo()}) then punt below and handle as a constructor. */ - if (code == VECTOR_TYPE - && comptypes (TREE_TYPE (inside_init), type) - && TREE_CONSTANT (inside_init)) - return build_vector (type, CONSTRUCTOR_ELTS (inside_init)); + if (code == VECTOR_TYPE + && comptypes (TREE_TYPE (inside_init), type) + && TREE_CONSTANT (inside_init)) + { + if (TREE_CODE (inside_init) == VECTOR_CST + && comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)), + TYPE_MAIN_VARIANT (type))) + return inside_init; + else + return build_vector (type, CONSTRUCTOR_ELTS (inside_init)); + } /* Any type can be initialized from an expression of the same type, optionally with braces. */ diff --git a/gcc/testsuite/gcc.c-torture/compile/simd-6.c b/gcc/testsuite/gcc.c-torture/compile/simd-6.c new file mode 100644 index 00000000000..9106a73363d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/simd-6.c @@ -0,0 +1,3 @@ +typedef int __attribute__((mode(V2SI))) vec; + +vec a[] = {(vec) {1, 2}, {3, 4}};