Bootstrapped and tested on x86_64-unknown-linux-gnu, applied.
Richard. 2019-12-02 Richard Biener <rguent...@suse.de> PR tree-optimization/92742 * tree-vect-loop.c (vect_fixup_reduc_chain): Do not touch the def-type but verify it is consistent with the original stmts. * gcc.dg/torture/pr92742.c: New testcase. Index: gcc/tree-vect-loop.c =================================================================== --- gcc/tree-vect-loop.c (revision 278893) +++ gcc/tree-vect-loop.c (working copy) @@ -643,6 +643,8 @@ vect_fixup_reduc_chain (stmt_vec_info st do { stmtp = STMT_VINFO_RELATED_STMT (stmt_info); + gcc_checking_assert (STMT_VINFO_DEF_TYPE (stmtp) + == STMT_VINFO_DEF_TYPE (stmt_info)); REDUC_GROUP_FIRST_ELEMENT (stmtp) = firstp; stmt_info = REDUC_GROUP_NEXT_ELEMENT (stmt_info); if (stmt_info) @@ -650,7 +652,6 @@ vect_fixup_reduc_chain (stmt_vec_info st = STMT_VINFO_RELATED_STMT (stmt_info); } while (stmt_info); - STMT_VINFO_DEF_TYPE (stmtp) = vect_reduction_def; } /* Fixup scalar cycles that now have their stmts detected as patterns. */ Index: gcc/testsuite/gcc.dg/torture/pr92742.c =================================================================== --- gcc/testsuite/gcc.dg/torture/pr92742.c (nonexistent) +++ gcc/testsuite/gcc.dg/torture/pr92742.c (working copy) @@ -0,0 +1,20 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-ftree-vectorize" } */ + +unsigned int qw; + +int +rs (int iq, int wg) +{ + for (qw = 0; qw < 2; ++qw) + { + } + + while (iq < 1) + { + wg *= qw * 2; + ++iq; + } + + return wg; +}