summaryrefslogtreecommitdiff
path: root/0085-loop-distribution-Bugfix-for-loop-distribution.patch
blob: 37c2a1bf9530ed16bcfd2e219914af85f310190a (plain)
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