[PATCH] Avoid ICE in tree-vect-patterns.c (PR tree-optimization/70916)
Jakub Jelinek
jakub@redhat.com
Tue May 3 11:30:00 GMT 2016
Hi!
We ICE on the following testcase. There are multiple issues, this patch
fixes just the ICE part; INTEGER_CST rhs1 is completely valid on COND_EXPR,
though of course a sign of missed optimization earlier; so we don't need
to spend too much time on it, but shouldn't ICE.
Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk/6.2?
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.
* gcc.c-torture/compile/pr70916.c: New test.
--- gcc/tree-vect-patterns.c.jj 2016-03-23 10:51:23.000000000 +0100
+++ gcc/tree-vect-patterns.c 2016-05-03 08:39:17.779229143 +0200
@@ -3673,8 +3673,10 @@ vect_recog_mask_conversion_pattern (vec<
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);
--- gcc/testsuite/gcc.c-torture/compile/pr70916.c.jj 2016-05-03 09:52:28.245508879 +0200
+++ gcc/testsuite/gcc.c-torture/compile/pr70916.c 2016-05-03 09:52:21.000000000 +0200
@@ -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;
+ }
+ }
+ }
+}
Jakub
More information about the Gcc-patches
mailing list