diff options
Diffstat (limited to '0085-loop-distribution-Bugfix-for-loop-distribution.patch')
-rw-r--r-- | 0085-loop-distribution-Bugfix-for-loop-distribution.patch | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/0085-loop-distribution-Bugfix-for-loop-distribution.patch b/0085-loop-distribution-Bugfix-for-loop-distribution.patch new file mode 100644 index 0000000..37c2a1b --- /dev/null +++ b/0085-loop-distribution-Bugfix-for-loop-distribution.patch @@ -0,0 +1,58 @@ +From d73cd8783ca930724def3e9909fc484ec15404f5 Mon Sep 17 00:00:00 2001 +From: benniaobufeijiushiji <linda7@huawei.com> +Date: Mon, 19 Dec 2022 11:48:12 +0800 +Subject: [PATCH 1/3] [loop-distribution] Bugfix for loop-distribution Add + exception in function BUILD_QUEUE when there is a null pointer in + grouped_loads. + +--- + gcc/tree-loop-distribution.c | 16 ++++++++++++++++ + 1 file changed, 16 insertions(+) + +diff --git a/gcc/tree-loop-distribution.c b/gcc/tree-loop-distribution.c +index 88b56379c..b68b9c7eb 100644 +--- a/gcc/tree-loop-distribution.c ++++ b/gcc/tree-loop-distribution.c +@@ -3208,16 +3208,31 @@ build_queue (loop_vec_info vinfo, unsigned vf, + { + unsigned group_size = stmt_info->size; + stmt_vec_info c_stmt_info = stmt_info; ++ bool succ = true; + while (group_size >= vf) + { + vec_alloc (worklist, vf); + for (unsigned j = 0; j < vf; ++j) + { ++ if (c_stmt_info == NULL) ++ { ++ succ = false; ++ break; ++ } + ginfo = new _group_info (); + ginfo->stmt = c_stmt_info->stmt; + worklist->safe_push (ginfo); + c_stmt_info = c_stmt_info->next_element; + } ++ if (!succ) ++ { ++ unsigned k = 0; ++ ginfo = NULL; ++ FOR_EACH_VEC_ELT (*worklist, k, ginfo) ++ delete ginfo; ++ vec_free (worklist); ++ break; ++ } + worklists.safe_push (worklist); + group_size -= vf; + } +@@ -3711,6 +3726,7 @@ free_ginfos (vec<vec<group_info> *> &worklists) + unsigned j = 0; + FOR_EACH_VEC_ELT (*worklist, j, ginfo) + delete ginfo; ++ vec_free (worklist); + } + } + +-- +2.27.0.windows.1 + |