Bugfix for loop-distribution, semi-relayout and MULL64. (cherry picked from commit 206c98c7c8ceca539ffc063e8c09135fb5cf1248)
59 lines
1.6 KiB
Diff
59 lines
1.6 KiB
Diff
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
|
|
|