aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2016-05-03 13:38:38 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2016-05-03 13:38:38 +0200
commitdea60b590ccf8968b5b651eddfc25ddf3226c8a1 (patch)
tree3459d718336d1ebc25505364e09c63567058e8b6 /gcc
parentadedd5c173388ae505470df152b9cb3947339566 (diff)
downloadgcc-dea60b590ccf8968b5b651eddfc25ddf3226c8a1.zip
gcc-dea60b590ccf8968b5b651eddfc25ddf3226c8a1.tar.gz
gcc-dea60b590ccf8968b5b651eddfc25ddf3226c8a1.tar.bz2
re PR tree-optimization/70916 (gcc ICE at -O3 on valid code on x86_64-linux-gnu in "tree_operand_check")
PR tree-optimization/70916 * tree-vect-patterns.c (vect_recog_mask_conversion_pattern): Give up if COND_EXPR rhs1 is neither SSA_NAME nor COMPARISON_CLASS_P. * gcc.c-torture/compile/pr70916.c: New test. From-SVN: r235814
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr70916.c28
-rw-r--r--gcc/tree-vect-patterns.c4
4 files changed, 38 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 7122b6c..8376068 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,9 @@
2016-05-03 Jakub Jelinek <jakub@redhat.com>
+ PR tree-optimization/70916
+ * tree-vect-patterns.c (vect_recog_mask_conversion_pattern): Give up
+ if COND_EXPR rhs1 is neither SSA_NAME nor COMPARISON_CLASS_P.
+
PR target/49244
* tree-ssa-ccp.c: Include stor-layout.h and optabs-query.h.
(optimize_atomic_bit_test_and): New function.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index b29f763..0941f39 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,8 @@
2016-05-03 Jakub Jelinek <jakub@redhat.com>
+ PR tree-optimization/70916
+ * gcc.c-torture/compile/pr70916.c: New test.
+
PR target/49244
* gcc.target/i386/pr49244-1.c: New test.
* gcc.target/i386/pr49244-2.c: New test.
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr70916.c b/gcc/testsuite/gcc.c-torture/compile/pr70916.c
new file mode 100644
index 0000000..c3ea69f
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr70916.c
@@ -0,0 +1,28 @@
+/* PR tree-optimization/70916 */
+
+int a, b, c, d, i, k;
+int static *e = &b, *j;
+int **f;
+int static ***g = &f;
+int *h;
+void
+fn1 ()
+{
+ for (;;)
+ {
+ int l[1] = { };
+ int m = (__UINTPTR_TYPE__) l;
+ for (; d; d--)
+ {
+ int ****n;
+ int *****o = &n;
+ i = a & 7 ? : a;
+ *e = (((*o = &g) != (int ****) g) < h[c], 0) || k;
+ if (*e)
+ {
+ **n = &j;
+ *e = (__UINTPTR_TYPE__) h;
+ }
+ }
+ }
+}
diff --git a/gcc/tree-vect-patterns.c b/gcc/tree-vect-patterns.c
index 27080d2..d08b454 100644
--- a/gcc/tree-vect-patterns.c
+++ b/gcc/tree-vect-patterns.c
@@ -3673,8 +3673,10 @@ vect_recog_mask_conversion_pattern (vec<gimple *> *stmts, tree *type_in,
if (!rhs1_type)
return NULL;
}
- else
+ else if (COMPARISON_CLASS_P (rhs1))
rhs1_type = TREE_TYPE (TREE_OPERAND (rhs1, 0));
+ else
+ return NULL;
vectype2 = get_mask_type_for_scalar_type (rhs1_type);