diff options
author | Jakub Jelinek <jakub@redhat.com> | 2011-10-07 13:48:03 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2011-10-07 13:48:03 +0200 |
commit | 87aab9b24b6ef536f090e3c5acb7e68d14f141fe (patch) | |
tree | fe3738ad5093b87424be7b6b2d256b9bbc324125 /gcc | |
parent | 228ee4261311d7639cbf951f891e4f0fa34d0a5b (diff) | |
download | gcc-87aab9b24b6ef536f090e3c5acb7e68d14f141fe.zip gcc-87aab9b24b6ef536f090e3c5acb7e68d14f141fe.tar.gz gcc-87aab9b24b6ef536f090e3c5acb7e68d14f141fe.tar.bz2 |
re PR middle-end/50650 (ICE in vect_is_simple_use_1, at tree-vect-stmts.c:5689)
PR tree-optimization/50650
* tree-vect-patterns.c (vect_recog_mixed_size_cond_pattern): Don't
call vect_is_simple_cond here, instead fail if cond_expr isn't
COMPARISON_CLASS_P or if get_vectype_for_scalar_type returns NULL
for cond_expr's first operand.
* tree-vect-stmts.c (vect_is_simple_cond): Static again.
* tree-vectorizer.h (vect_is_simple_cond): Remove prototype.
* gcc.c-torture/compile/pr50650.c: New test.
From-SVN: r179653
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/pr50650.c | 10 | ||||
-rw-r--r-- | gcc/tree-vect-patterns.c | 8 | ||||
-rw-r--r-- | gcc/tree-vect-stmts.c | 2 | ||||
-rw-r--r-- | gcc/tree-vectorizer.h | 1 |
6 files changed, 32 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 474b1c8..9d0991e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2011-10-07 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/50650 + * tree-vect-patterns.c (vect_recog_mixed_size_cond_pattern): Don't + call vect_is_simple_cond here, instead fail if cond_expr isn't + COMPARISON_CLASS_P or if get_vectype_for_scalar_type returns NULL + for cond_expr's first operand. + * tree-vect-stmts.c (vect_is_simple_cond): Static again. + * tree-vectorizer.h (vect_is_simple_cond): Remove prototype. + 2011-10-07 Andreas Krebbel <Andreas.Krebbel@de.ibm.com> * config/s390/s390.md (DWH, dwh): New mode macros. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f558333..7597cd2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-10-07 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/50650 + * gcc.c-torture/compile/pr50650.c: New test. + 2011-10-07 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> PR tree-optimization/50575 diff --git a/gcc/testsuite/gcc.c-torture/compile/pr50650.c b/gcc/testsuite/gcc.c-torture/compile/pr50650.c new file mode 100644 index 0000000..6c443e6 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr50650.c @@ -0,0 +1,10 @@ +/* PR tree-optimization/50650 */ + +unsigned int +foo (unsigned int x, unsigned int y) +{ + int i; + for (i = 8; i--; x <<= 1) + y ^= (x ^ y) & 0x80 ? 79U : 0U; + return y; +} diff --git a/gcc/tree-vect-patterns.c b/gcc/tree-vect-patterns.c index 0cd350d..a47b87b 100644 --- a/gcc/tree-vect-patterns.c +++ b/gcc/tree-vect-patterns.c @@ -1269,8 +1269,12 @@ vect_recog_mixed_size_cond_pattern (VEC (gimple, heap) **stmts, tree *type_in, || TREE_CODE (else_clause) != INTEGER_CST) return NULL; - if (!vect_is_simple_cond (cond_expr, loop_vinfo, &comp_vectype) - || !comp_vectype) + if (!COMPARISON_CLASS_P (cond_expr)) + return NULL; + + comp_vectype + = get_vectype_for_scalar_type (TREE_TYPE (TREE_OPERAND (cond_expr, 0))); + if (comp_vectype == NULL_TREE) return NULL; type = gimple_expr_type (last_stmt); diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c index 2110c96..f2ac8c7 100644 --- a/gcc/tree-vect-stmts.c +++ b/gcc/tree-vect-stmts.c @@ -4698,7 +4698,7 @@ vectorizable_load (gimple stmt, gimple_stmt_iterator *gsi, gimple *vec_stmt, Returns whether a COND can be vectorized. Checks whether condition operands are supportable using vec_is_simple_use. */ -bool +static bool vect_is_simple_cond (tree cond, loop_vec_info loop_vinfo, tree *comp_vectype) { tree lhs, rhs; diff --git a/gcc/tree-vectorizer.h b/gcc/tree-vectorizer.h index 2782082..f22add6 100644 --- a/gcc/tree-vectorizer.h +++ b/gcc/tree-vectorizer.h @@ -818,7 +818,6 @@ extern bool vect_transform_stmt (gimple, gimple_stmt_iterator *, bool *, slp_tree, slp_instance); extern void vect_remove_stores (gimple); extern bool vect_analyze_stmt (gimple, bool *, slp_tree); -extern bool vect_is_simple_cond (tree, loop_vec_info, tree *); extern bool vectorizable_condition (gimple, gimple_stmt_iterator *, gimple *, tree, int); extern void vect_get_load_cost (struct data_reference *, int, bool, |