This fixes a crash when we try to re-use a folded loop_vectorized_call when vectorizing an epilogue.
Bootstrapped on x86_64-unknown-linux-gnu, testing in progress. Richard. 2017-03-06 Richard Biener <rguent...@suse.de> PR tree-optimization/79894 * tree-vectorizer.c (vectorize_loops): Set loop_vectorized_call to NULL after folding it. * gcc.dg/vect/pr79887.c: New testcase. Index: gcc/tree-vectorizer.c =================================================================== --- gcc/tree-vectorizer.c (revision 245908) +++ gcc/tree-vectorizer.c (working copy) @@ -651,6 +651,7 @@ vectorize_loops (void) "basic block vectorized\n"); fold_loop_vectorized_call (loop_vectorized_call, boolean_true_node); + loop_vectorized_call = NULL; ret |= TODO_cleanup_cfg; } } @@ -703,6 +704,7 @@ vectorize_loops (void) if (loop_vectorized_call) { fold_loop_vectorized_call (loop_vectorized_call, boolean_true_node); + loop_vectorized_call = NULL; ret |= TODO_cleanup_cfg; } Index: gcc/testsuite/gcc.dg/vect/pr79887.c =================================================================== --- gcc/testsuite/gcc.dg/vect/pr79887.c (nonexistent) +++ gcc/testsuite/gcc.dg/vect/pr79887.c (working copy) @@ -0,0 +1,14 @@ +/* Test for pr79887. */ +/* { dg-do compile } */ +/* { dg-require-effective-target vect_condition } */ +/* { dg-additional-options "-fno-trapping-math --param vect-epilogues-nomask=1" } */ +/* { dg-additional-options "-mavx512ifma" { target x86_64-*-* i?86-*-* } } */ + +void +foo (float a[32], float b[2][32]) +{ + int i; + for (i = 0; i < 32; i++) + a[i] = (b[0][i] > b[1][i]) ? b[0][i] : b[1][i]; +} +