I am testing the following to fix PR78997. Bootstrap / regtest running on x86_64-unknown-linux-gnu.
Richard. 2016-01-05 Richard Biener <rguent...@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. Index: gcc/tree-vect-slp.c =================================================================== *** gcc/tree-vect-slp.c (revision 244093) --- gcc/tree-vect-slp.c (working copy) *************** vect_mask_constant_operand_p (gimple *st *** 2897,2905 **** tree cond = gimple_assign_rhs1 (stmt); if (TREE_CODE (cond) == SSA_NAME) ! return false; ! ! if (opnum) op = TREE_OPERAND (cond, 1); else op = TREE_OPERAND (cond, 0); --- 2897,2904 ---- tree cond = gimple_assign_rhs1 (stmt); if (TREE_CODE (cond) == SSA_NAME) ! op = cond; ! else if (opnum) op = TREE_OPERAND (cond, 1); else op = TREE_OPERAND (cond, 0); Index: gcc/testsuite/gcc.dg/torture/pr78997.c =================================================================== *** gcc/testsuite/gcc.dg/torture/pr78997.c (revision 0) --- gcc/testsuite/gcc.dg/torture/pr78997.c (working copy) *************** *** 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; + }