aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/pr69328.c16
-rw-r--r--gcc/tree-vect-stmts.c14
4 files changed, 36 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d675038..1fb002a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2016-01-20 Ilya Enkovich <enkovich.gnu@gmail.com>
+ Richard Biener <rguenther@suse.de>
+
+ 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 <rguenther@suse.de>
PR tree-optimization/69345
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 46b9e4e..14ef812 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2016-01-20 Ilya Enkovich <enkovich.gnu@gmail.com>
+
+ PR tree-optimization/69328
+ * gcc.dg/pr69328.c: New test.
+
2016-01-20 Jeff Law <law@redhat.com>
PR target/25114
diff --git a/gcc/testsuite/gcc.dg/pr69328.c b/gcc/testsuite/gcc.dg/pr69328.c
new file mode 100644
index 0000000..a495596
--- /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 6be3c97d..1d2246d 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;