diff options
author | meissner <meissner@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-05-08 22:38:49 +0000 |
---|---|---|
committer | meissner <meissner@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-05-08 22:38:49 +0000 |
commit | 54206f8636c102427991ea47c1384921aed3086c (patch) | |
tree | 0af10d3c32a433a02b46a4025e3c6673a396c80e /gcc/tree-vect-stmts.c | |
parent | fc86f9dfc71eac1dd1751ed3421994efe47314a9 (diff) | |
download | gcc-54206f8636c102427991ea47c1384921aed3086c.tar.gz |
Fix PR 40049
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@147298 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-vect-stmts.c')
-rw-r--r-- | gcc/tree-vect-stmts.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c index 0ab9883887c..06d51e2d318 100644 --- a/gcc/tree-vect-stmts.c +++ b/gcc/tree-vect-stmts.c @@ -1974,11 +1974,20 @@ vectorizable_operation (gimple stmt, gimple_stmt_iterator *gsi, else { optab = optab_for_tree_code (code, vectype, optab_vector); - if (vect_print_dump_info (REPORT_DETAILS) - && optab + if (optab && (optab_handler (optab, TYPE_MODE (vectype))->insn_code != CODE_FOR_nothing)) - fprintf (vect_dump, "vector/vector shift/rotate found."); + { + if (vect_print_dump_info (REPORT_DETAILS)) + fprintf (vect_dump, "vector/vector shift/rotate found."); + + /* Unlike the other binary operators, shifts/rotates have + the rhs being int, instead of the same type as the lhs, + so make sure the scalar is the right type if we are + dealing with vectors of short/char. */ + if (dt[1] == vect_constant_def) + op1 = fold_convert (TREE_TYPE (vectype), op1); + } } } |