aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2017-01-09 08:25:13 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2017-01-09 08:25:13 +0000
commit7b1b0cc127d2f29f6ce8158e9e814b99cc5a9304 (patch)
tree1f9367697b31ebd05c7cf3e0388acef6fc45eeec /gcc
parent813b9c0d3a1b95c653bea8db73d7971ac600b68e (diff)
downloadgcc-7b1b0cc127d2f29f6ce8158e9e814b99cc5a9304.zip
gcc-7b1b0cc127d2f29f6ce8158e9e814b99cc5a9304.tar.gz
gcc-7b1b0cc127d2f29f6ce8158e9e814b99cc5a9304.tar.bz2
re PR tree-optimization/78997 (ICE on valid code at -O3 on x86_64-linux-gnu: verify_gimple failed)
2017-01-09 Richard Biener <rguenther@suse.de> PR tree-optimization/78997 * tree-vect-slp.c (vect_mask_constant_operand_p): Handle SSA name condition properly. * gcc.dg/torture/pr78997.c: New testcase. From-SVN: r244218
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr78997.c106
-rw-r--r--gcc/tree-vect-slp.c5
4 files changed, 119 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 40ecb03..96f3c2e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,11 @@
2017-01-09 Richard Biener <rguenther@suse.de>
+ PR tree-optimization/78997
+ * tree-vect-slp.c (vect_mask_constant_operand_p): Handle SSA
+ name condition properly.
+
+2017-01-09 Richard Biener <rguenther@suse.de>
+
PR debug/79000
* dwarf2out.c (is_cxx): New overload with context.
(is_naming_typedef_decl): Use it.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 51f3bf3..053d2cf 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,10 @@
2017-01-09 Richard Biener <rguenther@suse.de>
+ PR tree-optimization/78997
+ * gcc.dg/torture/pr78997.c: New testcase.
+
+2017-01-09 Richard Biener <rguenther@suse.de>
+
PR debug/79000
* g++.dg/lto/pr79000_0.C: New testcase.
* g++.dg/lto/pr79000_1.c: Likewise.
diff --git a/gcc/testsuite/gcc.dg/torture/pr78997.c b/gcc/testsuite/gcc.dg/torture/pr78997.c
new file mode 100644
index 0000000..d43b973
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr78997.c
@@ -0,0 +1,106 @@
+/* { dg-do compile } */
+
+int printf (const char *, ...);
+
+static short f, p, q, s, u, aa, ab, ac;
+static int b, c, d, e, h, k, l, m, n, o, r, t, v, w, x, y, z, ad, ae, af, ag, ah, ai, aj, ak, al, am, an;
+int a, ao, ap, aq, ar, g, as, at, au, av, aw, ax, ay;
+
+void foo ()
+{
+ int ba[2], i, j, bb;
+ while (b)
+ {
+ b++;
+ while (b)
+ {
+ for (; aw; aw++)
+ for (; q; q++)
+ {
+ short bc[20];
+ if (k)
+ for (i = 0; i < 4; i++)
+ for (j = 0; j < 4; j++)
+ if (p)
+ bc[i * 4 + j] = 8;
+ for (; ad; ad--)
+ t = bc[1];
+ }
+ for (bb = 0; bb < 5; bb++)
+ if (m && v)
+ {
+ printf ("%d", n);
+ v = g && v;
+ n = 0;
+ }
+ ab &= ba[0];
+ aw = l;
+ aa++;
+ x++;
+ while (1)
+ {
+ int bd[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1};
+ ap = a ? ba[1] : 0;
+ if (ba[0] && o < ax)
+ {
+ int be[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1};
+ for (; ae; ae++)
+ {
+ e ^= ba[b] ^ aa;
+ f = r;
+ for (; y; y++)
+ aj &= u | ag;
+ int e[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1};
+ if (a)
+ {
+ r = c;
+ aj &= ag |= aq;
+ }
+ av = ai * u;
+ af = c;
+ }
+ au = d;
+ p++;
+ u = aj;
+ a = ba[1];
+ at = ar = af != ai && l;
+ as = ax = f;
+ ao = ak ? 0 : ah;
+ aw = ao;
+ }
+ ay = c;
+ int bf[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1};
+ if (w < f)
+ {
+ int bg[] = {0};
+ if (aw)
+ break;
+ }
+ else
+ aw = aa | (h &= ag) >> d, c = b = z && am;
+ for (; w; w--)
+ l = ac ^= al |= b;
+ for (; k; k = 0)
+ {
+ int bh = m | s && n;
+ m = bh;
+ for (; t; t--)
+ f = q ^= (c < (e < ah));
+ }
+ d = an |= b;
+ if (v)
+ {
+ int bi[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1};
+ if (aw)
+ break;
+ }
+ }
+ }
+ }
+}
+
+int main ()
+{
+ foo ();
+ return 0;
+}
diff --git a/gcc/tree-vect-slp.c b/gcc/tree-vect-slp.c
index 519652c..f192c7d 100644
--- a/gcc/tree-vect-slp.c
+++ b/gcc/tree-vect-slp.c
@@ -2897,9 +2897,8 @@ vect_mask_constant_operand_p (gimple *stmt, int opnum)
tree cond = gimple_assign_rhs1 (stmt);
if (TREE_CODE (cond) == SSA_NAME)
- return false;
-
- if (opnum)
+ op = cond;
+ else if (opnum)
op = TREE_OPERAND (cond, 1);
else
op = TREE_OPERAND (cond, 0);