48 lines
1.8 KiB
Diff
48 lines
1.8 KiB
Diff
|
|
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
|