aboutsummaryrefslogtreecommitdiff
path: root/gcc/flow.c
diff options
context:
space:
mode:
authorJim Wilson <wilson@cygnus.com>1998-09-21 13:59:47 +0000
committerJim Wilson <wilson@gcc.gnu.org>1998-09-21 06:59:47 -0700
commitd06c63899f3052740b85775a104db5ff7921c845 (patch)
tree7bb5a61c6af1d00d8fb6a1b83b8b7d2dbe717b06 /gcc/flow.c
parent0cfdd854df16a8bb6f36d9b5ed998a802038a223 (diff)
downloadgcc-d06c63899f3052740b85775a104db5ff7921c845.zip
gcc-d06c63899f3052740b85775a104db5ff7921c845.tar.gz
gcc-d06c63899f3052740b85775a104db5ff7921c845.tar.bz2
Fix for g++ failure reported by Brendan.
* flow.c (find_basic_blocks): Delete check for in_libcall_block when prev_code is a CALL_INSN. Change check for REG_RETVAL note to use in_libcall_block. (find_basic_blocks_1): Delete check for in_libcall_block when prev_code is a CALL_INSN. If CALL_INSN and in_libcall_block, then change code to INSN. From-SVN: r22529
Diffstat (limited to 'gcc/flow.c')
-rw-r--r--gcc/flow.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/gcc/flow.c b/gcc/flow.c
index fb309be..e939d19 100644
--- a/gcc/flow.c
+++ b/gcc/flow.c
@@ -331,12 +331,13 @@ find_basic_blocks (f, nregs, file, live_reachable_p)
|| (GET_RTX_CLASS (code) == 'i'
&& (prev_code == JUMP_INSN
|| (prev_code == CALL_INSN
- && (nonlocal_label_list != 0 || eh_region)
- && ! in_libcall_block)
+ && (nonlocal_label_list != 0 || eh_region))
|| prev_code == BARRIER)))
i++;
- if (code == CALL_INSN && find_reg_note (insn, REG_RETVAL, NULL_RTX))
+ /* We change the code of the CALL_INSN, so that it won't start a
+ new block. */
+ if (code == CALL_INSN && in_libcall_block)
code = INSN;
if (code != NOTE)
@@ -456,8 +457,7 @@ find_basic_blocks_1 (f, nonlocal_label_list, live_reachable_p)
|| (GET_RTX_CLASS (code) == 'i'
&& (prev_code == JUMP_INSN
|| (prev_code == CALL_INSN
- && (nonlocal_label_list != 0 || eh_note)
- && ! in_libcall_block)
+ && (nonlocal_label_list != 0 || eh_note))
|| prev_code == BARRIER)))
{
basic_block_head[++i] = insn;
@@ -519,6 +519,11 @@ find_basic_blocks_1 (f, nonlocal_label_list, live_reachable_p)
NOTE_BLOCK_NUMBER (XEXP (eh_note, 0));
BLOCK_NUM (insn) = i;
+ /* We change the code of the CALL_INSN, so that it won't start a
+ new block. */
+ if (code == CALL_INSN && in_libcall_block)
+ code = INSN;
+
if (code != NOTE)
prev_code = code;