+2013-11-22 Jakub Jelinek <jakub@redhat.com>
+
+ * expr.c (store_constructor): Allow CONSTRUCTOR with VECTOR_TYPE
+ (same sized) elements even if the type of the CONSTRUCTOR has
+ vector mode and target is a REG.
+
2013-11-22 Richard Biener <rguenther@suse.de>
Revert
enum machine_mode mode = GET_MODE (target);
icode = (int) optab_handler (vec_init_optab, mode);
+ /* Don't use vec_init<mode> if some elements have VECTOR_TYPE. */
+ if (icode != CODE_FOR_nothing)
+ {
+ tree value;
+
+ FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (exp), idx, value)
+ if (TREE_CODE (TREE_TYPE (value)) == VECTOR_TYPE)
+ {
+ icode = CODE_FOR_nothing;
+ break;
+ }
+ }
if (icode != CODE_FOR_nothing)
{
unsigned int i;
if (vector)
{
- /* Vector CONSTRUCTORs should only be built from smaller
- vectors in the case of BLKmode vectors. */
+ /* vec_init<mode> should not be used if there are VECTOR_TYPE
+ elements. */
gcc_assert (TREE_CODE (TREE_TYPE (value)) != VECTOR_TYPE);
RTVEC_ELT (vector, eltpos)
= expand_normal (value);