diff options
author | Jakub Jelinek <jakub@redhat.com> | 2012-06-29 05:51:08 +0000 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2012-06-29 05:51:08 +0000 |
commit | 4f3bae92794d7f922d40e830163a7110697491c5 (patch) | |
tree | ba15ae1ce71008720584a6558399cc8652e27b21 /gcc/tree-vect-stmts.c | |
parent | 3110c553d853911f597bbb1ac6cab75fed20dc74 (diff) |
* tree-vect-stmts.c (vectorizable_operation): Check both
VEC_WIDEN_MULT_LO_EXPR and VEC_WIDEN_MULT_HI_EXPR optabs.
Verify that operand[0]'s mode is TYPE_MODE (wide_vectype).
git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@189064 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-vect-stmts.c')
-rw-r--r-- | gcc/tree-vect-stmts.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c index b40e68c4060..a0a03c56d13 100644 --- a/gcc/tree-vect-stmts.c +++ b/gcc/tree-vect-stmts.c @@ -3504,14 +3504,19 @@ vectorizable_operation (gimple stmt, gimple_stmt_iterator *gsi, { decl1 = NULL_TREE; decl2 = NULL_TREE; - optab = optab_for_tree_code (VEC_WIDEN_MULT_HI_EXPR, + optab = optab_for_tree_code (VEC_WIDEN_MULT_LO_EXPR, vectype, optab_default); optab2 = optab_for_tree_code (VEC_WIDEN_MULT_HI_EXPR, vectype, optab_default); if (optab != NULL && optab2 != NULL && optab_handler (optab, vec_mode) != CODE_FOR_nothing - && optab_handler (optab2, vec_mode) != CODE_FOR_nothing) + && optab_handler (optab2, vec_mode) != CODE_FOR_nothing + && insn_data[optab_handler (optab, vec_mode)].operand[0].mode + == TYPE_MODE (wide_vectype) + && insn_data[optab_handler (optab2, + vec_mode)].operand[0].mode + == TYPE_MODE (wide_vectype)) { for (i = 0; i < nunits_in; i++) sel[i] = !BYTES_BIG_ENDIAN + 2 * i; |