diff -Nurp a/gcc/testsuite/gcc.dg/torture/pr92252.c b/gcc/testsuite/gcc.dg/torture/pr92252.c --- a/gcc/testsuite/gcc.dg/torture/pr92252.c 1970-01-01 08:00:00.000000000 +0800 +++ b/gcc/testsuite/gcc.dg/torture/pr92252.c 2020-07-03 10:39:44.808000000 +0800 @@ -0,0 +1,23 @@ +/* { do-do compile } */ +/* { dg-additional-options "-ftree-vectorize" } */ + +long int ar; +int dt; + +long int +pc (unsigned long int q3, int zw) +{ + long int em = 0; + + while (zw < 1) + { + q3 = zw * 2ul; + if (q3 != 0) + for (ar = 0; ar < 2; ++ar) + em = dt; + + ++zw; + } + + return em; +} diff -Nurp a/gcc/tree-vect-slp.c b/gcc/tree-vect-slp.c --- a/gcc/tree-vect-slp.c 2020-07-03 10:35:59.876000000 +0800 +++ b/gcc/tree-vect-slp.c 2020-07-03 10:39:44.808000000 +0800 @@ -581,6 +581,10 @@ again: { swap_ssa_operands (stmt, gimple_assign_rhs2_ptr (stmt), gimple_assign_rhs3_ptr (stmt)); + if (STMT_VINFO_REDUC_IDX (stmt_info) == 1) + STMT_VINFO_REDUC_IDX (stmt_info) = 2; + else if (STMT_VINFO_REDUC_IDX (stmt_info) == 2) + STMT_VINFO_REDUC_IDX (stmt_info) = 1; bool honor_nans = HONOR_NANS (TREE_OPERAND (cond, 0)); code = invert_tree_comparison (TREE_CODE (cond), honor_nans); gcc_assert (code != ERROR_MARK);