From 28b33016534ba4727d25c2aad5c8a78aeecd2b2c Mon Sep 17 00:00:00 2001 From: Ilya Enkovich Date: Wed, 20 Jan 2016 12:37:01 +0000 Subject: [PATCH] re PR tree-optimization/69328 (ice in vect_get_vec_def_for_operand, at tree-vect-stmts.c:1379 with -O3) gcc/ PR tree-optimization/69328 * tree-vect-stmts.c (vect_is_simple_cond): Check compared vectors have same number of elements. (vectorizable_condition): Fix masked version recognition. gcc/testsuite/ PR tree-optimization/69328 * gcc.dg/pr69328.c: New test. Co-Authored-By: Richard Biener From-SVN: r232608 --- gcc/ChangeLog | 8 ++++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/pr69328.c | 16 ++++++++++++++++ gcc/tree-vect-stmts.c | 14 +++++++------- 4 files changed, 36 insertions(+), 7 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/pr69328.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d6750386785..1fb002a9fb2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2016-01-20 Ilya Enkovich + Richard Biener + + PR tree-optimization/69328 + * tree-vect-stmts.c (vect_is_simple_cond): Check compared + vectors have same number of elements. + (vectorizable_condition): Fix masked version recognition. + 2016-01-20 Richard Biener PR tree-optimization/69345 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 46b9e4e9a1a..14ef8126a3d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-01-20 Ilya Enkovich + + PR tree-optimization/69328 + * gcc.dg/pr69328.c: New test. + 2016-01-20 Jeff Law PR target/25114 diff --git a/gcc/testsuite/gcc.dg/pr69328.c b/gcc/testsuite/gcc.dg/pr69328.c new file mode 100644 index 00000000000..a495596cf6a --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr69328.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-O3" } */ + +int a, b; +void fn1() { + int c; + char *d; + for (; a; ++a) { + int e, f; + e = d[a]; + if (!e && f || !f && e) + ++c; + } + if (c) + b = .499; +} diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c index 6be3c97d459..1d2246d1f91 100644 --- a/gcc/tree-vect-stmts.c +++ b/gcc/tree-vect-stmts.c @@ -7445,6 +7445,10 @@ vect_is_simple_cond (tree cond, vec_info *vinfo, tree *comp_vectype) && TREE_CODE (rhs) != FIXED_CST) return false; + if (vectype1 && vectype2 + && TYPE_VECTOR_SUBPARTS (vectype1) != TYPE_VECTOR_SUBPARTS (vectype2)) + return false; + *comp_vectype = vectype1 ? vectype1 : vectype2; return true; } @@ -7548,13 +7552,9 @@ vectorizable_condition (gimple *stmt, gimple_stmt_iterator *gsi, if (!vect_is_simple_use (else_clause, stmt_info->vinfo, &def_stmt, &dt)) return false; - if (VECTOR_BOOLEAN_TYPE_P (comp_vectype)) - { - vec_cmp_type = comp_vectype; - masked = true; - } - else - vec_cmp_type = build_same_sized_truth_vector_type (comp_vectype); + masked = !COMPARISON_CLASS_P (cond_expr); + vec_cmp_type = build_same_sized_truth_vector_type (comp_vectype); + if (vec_cmp_type == NULL_TREE) return false; -- 2.30.2