aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-vect-patterns.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@gcc.gnu.org>2017-02-06 20:15:36 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2017-02-06 20:15:36 +0100
commit2568d8a1f6d3912e53c457a1ea080050a834cf32 (patch)
tree5df5458d496ad1f8120100b5ff671033e10219d5 /gcc/tree-vect-patterns.c
parentaae936b9a3914cf4b5d532644fbdcb1bf70f8099 (diff)
downloadgcc-2568d8a1f6d3912e53c457a1ea080050a834cf32.zip
gcc-2568d8a1f6d3912e53c457a1ea080050a834cf32.tar.gz
gcc-2568d8a1f6d3912e53c457a1ea080050a834cf32.tar.bz2
re PR tree-optimization/79284 (ICE on valid code at -O3 on x86_64-linux-gnu: verify_gimple failed)
PR tree-optimization/79284 * tree-vectorizer.h (VECT_SCALAR_BOOLEAN_TYPE_P): Define. * tree-vect-stmts.c (vect_get_vec_def_for_operand, vectorizable_mask_load_store, vectorizable_operation, vect_is_simple_cond, get_same_sized_vectype): Use it instead of comparing TREE_CODE of a type against BOOLEAN_TYPE. * tree-vect-patterns.c (check_bool_pattern, search_type_for_mask_1, vect_recog_bool_pattern, vect_recog_mask_conversion_pattern): Likewise. * tree-vect-slp.c (vect_get_constant_vectors): Likewise. * tree-vect-loop.c (vect_determine_vectorization_factor): Likewise. Remove redundant gimple_code (stmt) == GIMPLE_ASSIGN test after is_gimple_assign (stmt). Replace another such test with is_gimple_assign (stmt). testsuite/ * gcc.c-torture/compile/pr79284.c: New test. From-SVN: r245214
Diffstat (limited to 'gcc/tree-vect-patterns.c')
-rw-r--r--gcc/tree-vect-patterns.c16
1 files changed, 5 insertions, 11 deletions
diff --git a/gcc/tree-vect-patterns.c b/gcc/tree-vect-patterns.c
index 7447dff..39f0133 100644
--- a/gcc/tree-vect-patterns.c
+++ b/gcc/tree-vect-patterns.c
@@ -3158,9 +3158,7 @@ check_bool_pattern (tree var, vec_info *vinfo, hash_set<gimple *> &stmts)
break;
CASE_CONVERT:
- if ((TYPE_PRECISION (TREE_TYPE (rhs1)) != 1
- || !TYPE_UNSIGNED (TREE_TYPE (rhs1)))
- && TREE_CODE (TREE_TYPE (rhs1)) != BOOLEAN_TYPE)
+ if (!VECT_SCALAR_BOOLEAN_TYPE_P (TREE_TYPE (rhs1)))
return false;
if (! check_bool_pattern (rhs1, vinfo, stmts))
return false;
@@ -3474,9 +3472,7 @@ search_type_for_mask_1 (tree var, vec_info *vinfo,
if (TREE_CODE (var) != SSA_NAME)
return NULL_TREE;
- if ((TYPE_PRECISION (TREE_TYPE (var)) != 1
- || !TYPE_UNSIGNED (TREE_TYPE (var)))
- && TREE_CODE (TREE_TYPE (var)) != BOOLEAN_TYPE)
+ if (!VECT_SCALAR_BOOLEAN_TYPE_P (TREE_TYPE (var)))
return NULL_TREE;
if (!vect_is_simple_use (var, vinfo, &def_stmt, &dt))
@@ -3518,7 +3514,7 @@ search_type_for_mask_1 (tree var, vec_info *vinfo,
{
tree comp_vectype, mask_type;
- if (TREE_CODE (TREE_TYPE (rhs1)) == BOOLEAN_TYPE)
+ if (VECT_SCALAR_BOOLEAN_TYPE_P (TREE_TYPE (rhs1)))
{
res = search_type_for_mask_1 (rhs1, vinfo, cache);
res2 = search_type_for_mask_1 (gimple_assign_rhs2 (def_stmt),
@@ -3637,9 +3633,7 @@ vect_recog_bool_pattern (vec<gimple *> *stmts, tree *type_in,
var = gimple_assign_rhs1 (last_stmt);
lhs = gimple_assign_lhs (last_stmt);
- if ((TYPE_PRECISION (TREE_TYPE (var)) != 1
- || !TYPE_UNSIGNED (TREE_TYPE (var)))
- && TREE_CODE (TREE_TYPE (var)) != BOOLEAN_TYPE)
+ if (!VECT_SCALAR_BOOLEAN_TYPE_P (TREE_TYPE (var)))
return NULL;
hash_set<gimple *> bool_stmts;
@@ -4023,7 +4017,7 @@ vect_recog_mask_conversion_pattern (vec<gimple *> *stmts, tree *type_in,
/* Now check for binary boolean operations requiring conversion for
one of operands. */
- if (TREE_CODE (TREE_TYPE (lhs)) != BOOLEAN_TYPE)
+ if (!VECT_SCALAR_BOOLEAN_TYPE_P (TREE_TYPE (lhs)))
return NULL;
if (rhs_code != BIT_IOR_EXPR