summaryrefslogtreecommitdiff
path: root/0329-Fixed-work-with-loops-in-process_complex_cond.patch
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2025-02-28 10:03:49 +0000
committerCoprDistGit <infra@openeuler.org>2025-02-28 10:03:49 +0000
commit73127104a245052cd5cf29cdaaca3e5c32c70348 (patch)
tree8e28b63e478c43c252f18b49836dff7313affe54 /0329-Fixed-work-with-loops-in-process_complex_cond.patch
parent49d3feaf4665cdb07576fc1a2382a4d82a612d35 (diff)
automatic import of gccopeneuler24.03_LTS_SP1
Diffstat (limited to '0329-Fixed-work-with-loops-in-process_complex_cond.patch')
-rw-r--r--0329-Fixed-work-with-loops-in-process_complex_cond.patch90
1 files changed, 90 insertions, 0 deletions
diff --git a/0329-Fixed-work-with-loops-in-process_complex_cond.patch b/0329-Fixed-work-with-loops-in-process_complex_cond.patch
new file mode 100644
index 0000000..510544a
--- /dev/null
+++ b/0329-Fixed-work-with-loops-in-process_complex_cond.patch
@@ -0,0 +1,90 @@
+From 66e1c68b47a1fd889e206be5572a2ba5d62afb4d Mon Sep 17 00:00:00 2001
+From: Zinin Ivan WX1305386 <zinin.ivan@huawei-partners.com>
+Date: Tue, 17 Dec 2024 22:07:36 +0800
+Subject: [PATCH] [if-split][BugFix]Fixed work with loops in
+ process_complex_cond()
+
+Signed-off-by: zhenyu--zhao_admin <zhaozhenyu17@huawei.com>
+---
+ gcc/gimple-if-split.cc | 17 +++++++++++++++--
+ gcc/tree-loop-distribution.cc | 6 ++++++
+ gcc/tree-vect-loop.cc | 4 ----
+ 3 files changed, 21 insertions(+), 6 deletions(-)
+
+diff --git a/gcc/gimple-if-split.cc b/gcc/gimple-if-split.cc
+index 914b65d4782..b535ffab1c3 100644
+--- a/gcc/gimple-if-split.cc
++++ b/gcc/gimple-if-split.cc
+@@ -262,9 +262,11 @@ process_complex_cond (basic_block cond_bb, basic_block then_bb,
+
+ /* Setting cond. */
+ if (a_var_n_cst.n != NULL_TREE && a_var_n_cst.cst != NULL_TREE)
+- /* Setting cond as: if (n == const). */
+- gimple_cond_set_condition (as_a<gcond *> (cond), EQ_EXPR, a_var_n_cst.n,
++ {
++ /* Setting cond as: if (n == const). */
++ gimple_cond_set_condition (as_a<gcond *> (cond), EQ_EXPR, a_var_n_cst.n,
+ a_var_n_cst.cst);
++ }
+ else
+ {
+ /* Setting cond as: if (a != 0). */
+@@ -276,8 +278,19 @@ process_complex_cond (basic_block cond_bb, basic_block then_bb,
+ /* Creating inner_cond_bb. */
+ edge then_e = find_edge (cond_bb, then_bb);
+ edge else_e = find_edge (cond_bb, else_bb);
++
++ bool inner_cond_bb_need_set_loop = false;
++ if (else_e->dest->loop_father != else_e->src->loop_father)
++ inner_cond_bb_need_set_loop = true;
++
+ basic_block inner_cond_bb = split_edge (else_e);
+
++ if (inner_cond_bb_need_set_loop)
++ {
++ remove_bb_from_loops (inner_cond_bb);
++ add_bb_to_loop (inner_cond_bb, cond_bb->loop_father);
++ }
++
+ /* Setting inner_cond. */
+ gcond *inner_cond = NULL;
+ if (b_var_n_cst.n != NULL_TREE && b_var_n_cst.cst != NULL_TREE)
+diff --git a/gcc/tree-loop-distribution.cc b/gcc/tree-loop-distribution.cc
+index 8d118e98739..f7a4690246c 100644
+--- a/gcc/tree-loop-distribution.cc
++++ b/gcc/tree-loop-distribution.cc
+@@ -5265,10 +5265,16 @@ loop_distribution::execute (function *fun)
+
+ bool destroy_p;
+ int nb_generated_loops, nb_generated_calls;
++
++ vect_slp_init ();
++
+ nb_generated_loops
+ = distribute_loop (loop, work_list, cd, &nb_generated_calls,
+ &destroy_p, (!optimize_loop_for_speed_p (loop)
+ || !flag_tree_loop_distribution));
++
++ vect_slp_fini ();
++
+ if (destroy_p)
+ loops_to_be_destroyed.safe_push (loop);
+
+diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc
+index f296e9415c4..7f75779519a 100644
+--- a/gcc/tree-vect-loop.cc
++++ b/gcc/tree-vect-loop.cc
+@@ -3016,10 +3016,6 @@ vect_analyze_loop (class loop *loop, vec_info_shared *shared,
+ opt_loop_vec_info first_loop_vinfo = opt_loop_vec_info::success (NULL);
+ /* Loop_vinfo for loop-distribution pass. */
+ opt_loop_vec_info fail_loop_vinfo = opt_loop_vec_info::success (NULL);
+- if (result_only_p)
+- {
+- vect_slp_init ();
+- }
+ unsigned int mode_i = 0;
+ unsigned HOST_WIDE_INT simdlen = loop->simdlen;
+
+--
+Gitee
+