diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0ab88fa1198ffa5f01e6fd773517c87a9a293067..c8a71dbd53aba46c4af908be6224dc16c0c47426 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,9 @@
 2011-12-01  Jakub Jelinek  <jakub@redhat.com>
 
+	PR tree-optimization/51356
+	* tree-vect-patterns.c (vect_recog_bool_pattern): Give up if
+	vectype doesn't have VECTOR_MODE_P.
+
 	PR debug/50317
 	* tree-ssa-dce.c (remove_dead_stmt): Add a debug stmt when removing
 	as unnecessary a store to a variable with gimple reg type.
diff --git a/gcc/tree-vect-patterns.c b/gcc/tree-vect-patterns.c
index 22414475f6f8695762f57e1cfa1a548c9eeadd5b..306bac28c18fef74540b95d06ab47e0057db506c 100644
--- a/gcc/tree-vect-patterns.c
+++ b/gcc/tree-vect-patterns.c
@@ -2074,6 +2074,8 @@ vect_recog_bool_pattern (VEC (gimple, heap) **stmts, tree *type_in,
       stmt_vec_info pattern_stmt_info;
       vectype = STMT_VINFO_VECTYPE (stmt_vinfo);
       gcc_assert (vectype != NULL_TREE);
+      if (!VECTOR_MODE_P (TYPE_MODE (vectype)))
+	return NULL;
       if (!check_bool_pattern (var, loop_vinfo))
 	return NULL;