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