This backport contains 1 patch from gcc main stream tree. The commit id of these patchs list as following in the order of time. 0001-tree-optimization-95717-fix-SSA-update-for-vectorize.patch d0909f5858ad81e6d8b73fa6193be19cb5e6ed7b diff -Nurp a/gcc/testsuite/g++.dg/torture/pr95717.C b/gcc/testsuite/g++.dg/torture/pr95717.C --- a/gcc/testsuite/g++.dg/torture/pr95717.C 1970-01-01 08:00:00.000000000 +0800 +++ b/gcc/testsuite/g++.dg/torture/pr95717.C 2020-08-24 21:45:48.436000000 +0800 @@ -0,0 +1,12 @@ +// { dg-do compile } + +bool a; +extern bool b[]; +long c, d; +int *f; +void g(bool h) +{ + for (short e = 0; e < c; e = 4) + for (; d; d++) + b[d] = a = f[d] ? c ? h : 0 : h; +} diff -Nurp a/gcc/tree-vect-loop-manip.c b/gcc/tree-vect-loop-manip.c --- a/gcc/tree-vect-loop-manip.c 2020-08-24 21:45:23.620000000 +0800 +++ b/gcc/tree-vect-loop-manip.c 2020-08-24 21:45:48.436000000 +0800 @@ -1073,6 +1073,10 @@ slpeel_tree_duplicate_loop_to_edge_cfg ( add_phi_args_after_copy (new_bbs, scalar_loop->num_nodes + 1, NULL); + /* Skip new preheader since it's deleted if copy loop is added at entry. */ + for (unsigned i = (at_exit ? 0 : 1); i < scalar_loop->num_nodes + 1; i++) + rename_variables_in_bb (new_bbs[i], duplicate_outer_loop); + if (scalar_loop != loop) { /* If we copied from SCALAR_LOOP rather than LOOP, SSA_NAMEs from @@ -1150,10 +1154,6 @@ slpeel_tree_duplicate_loop_to_edge_cfg ( loop_preheader_edge (new_loop)->src); } - /* Skip new preheader since it's deleted if copy loop is added at entry. */ - for (unsigned i = (at_exit ? 0 : 1); i < scalar_loop->num_nodes + 1; i++) - rename_variables_in_bb (new_bbs[i], duplicate_outer_loop); - if (scalar_loop != loop) { /* Update new_loop->header PHIs, so that on the preheader