xref: /OK3568_Linux_fs/buildroot/package/gcc/8.4.0/0001-xtensa-fix-PR-target-91880.patch (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593SmuzhiyunFrom 28623c81b50663e946790649352cb1b3ed23954d Mon Sep 17 00:00:00 2001
2*4882a593SmuzhiyunFrom: Max Filippov <jcmvbkbc@gmail.com>
3*4882a593SmuzhiyunDate: Tue, 24 Sep 2019 04:15:17 -0700
4*4882a593SmuzhiyunSubject: [PATCH] xtensa: fix PR target/91880
5*4882a593Smuzhiyun
6*4882a593SmuzhiyunXtensa hwloop_optimize segfaults when zero overhead loop is about to be
7*4882a593Smuzhiyuninserted as the first instruction of the function.
8*4882a593SmuzhiyunInsert zero overhead loop instruction into new basic block before the
9*4882a593Smuzhiyunloop when basic block that precedes the loop is empty.
10*4882a593Smuzhiyun
11*4882a593Smuzhiyun2019-09-26  Max Filippov  <jcmvbkbc@gmail.com>
12*4882a593Smuzhiyungcc/
13*4882a593Smuzhiyun	* config/xtensa/xtensa.c (hwloop_optimize): Insert zero overhead
14*4882a593Smuzhiyun	loop instruction into new basic block before the loop when basic
15*4882a593Smuzhiyun	block that precedes the loop is empty.
16*4882a593Smuzhiyun
17*4882a593SmuzhiyunSigned-off-by: Max Filippov <jcmvbkbc@gmail.com>
18*4882a593Smuzhiyun[Romain: rebase on gcc 8.4.0]
19*4882a593SmuzhiyunSigned-off-by: Romain Naour <romain.naour@smile.fr>
20*4882a593Smuzhiyun---
21*4882a593SmuzhiyunBackported from: r276166
22*4882a593Smuzhiyun
23*4882a593Smuzhiyun gcc/config/xtensa/xtensa.c | 5 +++--
24*4882a593Smuzhiyun 1 file changed, 3 insertions(+), 2 deletions(-)
25*4882a593Smuzhiyun
26*4882a593Smuzhiyundiff --git a/gcc/config/xtensa/xtensa.c b/gcc/config/xtensa/xtensa.c
27*4882a593Smuzhiyunindex 08f9f7c7a8f..de206527810 100644
28*4882a593Smuzhiyun--- a/gcc/config/xtensa/xtensa.c
29*4882a593Smuzhiyun+++ b/gcc/config/xtensa/xtensa.c
30*4882a593Smuzhiyun@@ -4232,7 +4232,9 @@ hwloop_optimize (hwloop_info loop)
31*4882a593Smuzhiyun
32*4882a593Smuzhiyun   seq = get_insns ();
33*4882a593Smuzhiyun
34*4882a593Smuzhiyun-  if (!single_succ_p (entry_bb) || vec_safe_length (loop->incoming) > 1)
35*4882a593Smuzhiyun+  entry_after = BB_END (entry_bb);
36*4882a593Smuzhiyun+  if (!single_succ_p (entry_bb) || vec_safe_length (loop->incoming) > 1
37*4882a593Smuzhiyun+      || !entry_after)
38*4882a593Smuzhiyun     {
39*4882a593Smuzhiyun       basic_block new_bb;
40*4882a593Smuzhiyun       edge e;
41*4882a593Smuzhiyun@@ -4253,7 +4255,6 @@ hwloop_optimize (hwloop_info loop)
42*4882a593Smuzhiyun     }
43*4882a593Smuzhiyun   else
44*4882a593Smuzhiyun     {
45*4882a593Smuzhiyun-      entry_after = BB_END (entry_bb);
46*4882a593Smuzhiyun       while (DEBUG_INSN_P (entry_after)
47*4882a593Smuzhiyun              || (NOTE_P (entry_after)
48*4882a593Smuzhiyun 		 && NOTE_KIND (entry_after) != NOTE_INSN_BASIC_BLOCK))
49*4882a593Smuzhiyun--
50*4882a593Smuzhiyun2.24.1
51*4882a593Smuzhiyun
52