aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2011-10-28 11:25:18 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2011-10-28 11:25:18 +0200
commitcede2577b90bf851b4535ffdb0ea0b3cfbbfdda3 (patch)
treee0ca54aea6d06a191955ed05d214308f5de3e483 /gcc
parent0de82be51731d649414f86d09f9cd3d672df8dda (diff)
downloadgcc-cede2577b90bf851b4535ffdb0ea0b3cfbbfdda3.zip
gcc-cede2577b90bf851b4535ffdb0ea0b3cfbbfdda3.tar.gz
gcc-cede2577b90bf851b4535ffdb0ea0b3cfbbfdda3.tar.bz2
tree-vect-stmts.c (vectorizable_shift): Give up if op1 has different vector mode from vectype's mode.
* tree-vect-stmts.c (vectorizable_shift): Give up if op1 has different vector mode from vectype's mode. From-SVN: r180606
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/tree-vect-stmts.c11
2 files changed, 15 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 61320f8..282cb6d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2011-10-28 Jakub Jelinek <jakub@redhat.com>
+
+ * tree-vect-stmts.c (vectorizable_shift): Give up if op1 has different
+ vector mode from vectype's mode.
+
2011-10-28 Chung-Lin Tang <cltang@codesourcery.com>
PR rtl-optimization/49720
diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c
index 4cd582d..dc81acb 100644
--- a/gcc/tree-vect-stmts.c
+++ b/gcc/tree-vect-stmts.c
@@ -2318,6 +2318,7 @@ vectorizable_shift (gimple stmt, gimple_stmt_iterator *gsi,
int nunits_in;
int nunits_out;
tree vectype_out;
+ tree op1_vectype;
int ncopies;
int j, i;
VEC (tree, heap) *vec_oprnds0 = NULL, *vec_oprnds1 = NULL;
@@ -2387,7 +2388,8 @@ vectorizable_shift (gimple stmt, gimple_stmt_iterator *gsi,
return false;
op1 = gimple_assign_rhs2 (stmt);
- if (!vect_is_simple_use (op1, loop_vinfo, bb_vinfo, &def_stmt, &def, &dt[1]))
+ if (!vect_is_simple_use_1 (op1, loop_vinfo, bb_vinfo, &def_stmt, &def,
+ &dt[1], &op1_vectype))
{
if (vect_print_dump_info (REPORT_DETAILS))
fprintf (vect_dump, "use not simple.");
@@ -2444,6 +2446,13 @@ vectorizable_shift (gimple stmt, gimple_stmt_iterator *gsi,
optab = optab_for_tree_code (code, vectype, optab_vector);
if (vect_print_dump_info (REPORT_DETAILS))
fprintf (vect_dump, "vector/vector shift/rotate found.");
+ if (TYPE_MODE (op1_vectype) != TYPE_MODE (vectype))
+ {
+ if (vect_print_dump_info (REPORT_DETAILS))
+ fprintf (vect_dump, "unusable type for last operand in"
+ " vector/vector shift/rotate.");
+ return false;
+ }
}
/* See if the machine has a vector shifted by scalar insn and if not
then see if it has a vector shifted by vector insn. */