1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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
|