aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2012-06-29 07:51:08 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2012-06-29 07:51:08 +0200
commit2b5bb7da8fbc4b028d7cf20f3fa3484c3d86f5e7 (patch)
treeba15ae1ce71008720584a6558399cc8652e27b21 /gcc
parent90686faa403ca13d217bf6e8ad15451350780cd7 (diff)
downloadgcc-2b5bb7da8fbc4b028d7cf20f3fa3484c3d86f5e7.zip
gcc-2b5bb7da8fbc4b028d7cf20f3fa3484c3d86f5e7.tar.gz
gcc-2b5bb7da8fbc4b028d7cf20f3fa3484c3d86f5e7.tar.bz2
tree-vect-stmts.c (vectorizable_operation): Check both VEC_WIDEN_MULT_LO_EXPR and VEC_WIDEN_MULT_HI_EXPR optabs.
* 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). From-SVN: r189064
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/tree-vect-stmts.c9
2 files changed, 13 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 29ecf36..7932194 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2012-06-29 Jakub Jelinek <jakub@redhat.com>
+
+ * 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).
+
2012-06-28 Richard Henderson <rth@redhat.com>
* doc/generic.texi (MULT_HIGHPART_EXPR): Document it.
diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c
index b40e68c..a0a03c5 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;