From: Ulrich Weigand Date: Mon, 3 Jan 2011 13:25:25 +0000 (+0000) Subject: tree-vect-generic.c (expand_vector_operations_1): When using vector/ vector optab... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=2fa6eeff4bc0992a96c11b7bf1f81a98f1c91545;p=gcc.git tree-vect-generic.c (expand_vector_operations_1): When using vector/ vector optab to expand vector/scalar shift... * tree-vect-generic.c (expand_vector_operations_1): When using vector/ vector optab to expand vector/scalar shift, update gimple to vector. From-SVN: r168423 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 517704f58ba..477380f12b0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2010-01-03 Ulrich Weigand + + * tree-vect-generic.c (expand_vector_operations_1): When using vector/ + vector optab to expand vector/scalar shift, update gimple to vector. + 2011-01-03 Martin Jambor * cgraphunit.c (verify_cgraph_node): Verify there is no direct call to diff --git a/gcc/tree-vect-generic.c b/gcc/tree-vect-generic.c index 3f582402443..82fc61518fb 100644 --- a/gcc/tree-vect-generic.c +++ b/gcc/tree-vect-generic.c @@ -520,7 +520,24 @@ expand_vector_operations_1 (gimple_stmt_iterator *gsi) /* Try for a vector/scalar shift, and if we don't have one, see if we have a vector/vector shift */ else if (!vector_scalar_shift) - op = optab_for_tree_code (code, type, optab_vector); + { + op = optab_for_tree_code (code, type, optab_vector); + + if (op && (optab_handler (op, TYPE_MODE (type)) + != CODE_FOR_nothing)) + { + /* Transform vector scalar => vector {x,x,x,x}. */ + int n_parts = TYPE_VECTOR_SUBPARTS (type); + int part_size = tree_low_cst (TYPE_SIZE (TREE_TYPE (type)), 1); + tree part_type = lang_hooks.types.type_for_size (part_size, 1); + tree vect_type = build_vector_type (part_type, n_parts); + + rhs2 = fold_convert (part_type, rhs2); + rhs2 = build_vector_from_val (vect_type, rhs2); + gimple_assign_set_rhs2 (stmt, rhs2); + update_stmt (stmt); + } + } } else op = optab_for_tree_code (code, type, optab_default);