(find_basic_blocks): When starting new basic block for a CALL_INSN in the presence of nonlocal labels...

(find_basic_blocks): When starting new basic block for a CALL_INSN in
the presence of nonlocal labels, don't get confused with following
CLOBBER.
(flow_analysis): Use same logic as find_basic_block to see when the
insn after a CALL_INSN starts a new basic block.

From-SVN: r6097
This commit is contained in:
Richard Kenner 1993-11-14 23:18:24 -05:00
parent b258707c7e
commit a3579a47d1

View File

@ -341,10 +341,17 @@ flow_analysis (f, nregs, file)
|| (GET_RTX_CLASS (code) == 'i'
&& (prev_code == JUMP_INSN
|| (prev_code == CALL_INSN
&& nonlocal_label_list != 0)
&& nonlocal_label_list != 0
/* Ignore a CLOBBER after a CALL_INSN here. */
&& ! (code == INSN
&& GET_CODE (PATTERN (insn)) == CLOBBER))
|| prev_code == BARRIER)))
i++;
if (code != NOTE)
if (code != NOTE
/* Skip a CLOBBER after a CALL_INSN. See similar code in
find_basic_blocks. */
&& ! (prev_code == CALL_INSN
&& code == INSN && GET_CODE (PATTERN (insn)) == CLOBBER))
prev_code = code;
}
}
@ -431,7 +438,11 @@ find_basic_blocks (f, nonlocal_label_list)
|| (GET_RTX_CLASS (code) == 'i'
&& (prev_code == JUMP_INSN
|| (prev_code == CALL_INSN
&& nonlocal_label_list != 0)
&& nonlocal_label_list != 0
/* Ignore if CLOBBER since we consider this
part of the CALL. See below. */
&& ! (code == INSN
&& GET_CODE (PATTERN (insn)) == CLOBBER))
|| prev_code == BARRIER)))
{
basic_block_head[++i] = insn;