flow.c (count_basic_blocks, [...]): Remove last change.

* flow.c (count_basic_blocks, find_basic_blocks_1): Remove last change.
	* optabs.c (emit_libcall_block): If have REG_EHG_REGION, update
	region number to -1.

From-SVN: r33164
This commit is contained in:
Richard Kenner 2000-04-15 15:20:58 +00:00 committed by Richard Kenner
parent a46c7e85d8
commit c29ea88a1d
3 changed files with 35 additions and 44 deletions

View File

@ -1,3 +1,9 @@
Sat Apr 15 10:59:19 2000 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* flow.c (count_basic_blocks, find_basic_blocks_1): Remove last change.
* optabs.c (emit_libcall_block): If have REG_EHG_REGION, update
region number to -1.
2000-04-15 Richard Earnshaw (rearnsah@arm.com)
* emit-rtl.c (unshare_all_rtl_again): Unmark everything, then

View File

@ -462,7 +462,6 @@ count_basic_blocks (f)
register int count = 0;
int eh_region = 0;
int call_had_abnormal_edge = 0;
int in_libcall = 0;
prev_code = JUMP_INSN;
for (insn = f; insn; insn = NEXT_INSN (insn))
@ -473,17 +472,9 @@ count_basic_blocks (f)
|| (GET_RTX_CLASS (code) == 'i'
&& (prev_code == JUMP_INSN
|| prev_code == BARRIER
|| (prev_code == CALL_INSN
&& call_had_abnormal_edge && in_libcall == 0))))
|| (prev_code == CALL_INSN && call_had_abnormal_edge))))
count++;
/* Track whether or not we are in a LIBCALL block. These must
all be within the same basic block. */
if (find_reg_note (insn, REG_LIBCALL, NULL_RTX) != 0)
in_libcall++;
else if (find_reg_note (insn, REG_RETVAL, NULL_RTX) != 0)
in_libcall--;
/* Record whether this call created an edge. */
if (code == CALL_INSN)
{
@ -538,7 +529,6 @@ find_basic_blocks_1 (f)
rtx label_value_list = NULL_RTX;
rtx head = NULL_RTX;
rtx end = NULL_RTX;
int in_libcall = 0;
/* We process the instructions in a slightly different way than we did
previously. This is so that we see a NOTE_BASIC_BLOCK after we have
@ -671,9 +661,8 @@ find_basic_blocks_1 (f)
call_has_abnormal_edge = 1;
/* A basic block ends at a call that can either throw or
do a non-local goto. LIBCALLs must reside totally in one
basic block, so don't end a block after them. */
if (call_has_abnormal_edge && in_libcall == 0)
do a non-local goto. */
if (call_has_abnormal_edge)
{
new_bb_inclusive:
if (head == NULL_RTX)
@ -713,27 +702,21 @@ find_basic_blocks_1 (f)
we know isn't part of any otherwise visible control flow. */
for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
{
if (REG_NOTE_KIND (note) == REG_LABEL)
{
rtx lab = XEXP (note, 0), next;
if (REG_NOTE_KIND (note) == REG_LABEL)
{
rtx lab = XEXP (note, 0), next;
if (lab == eh_return_stub_label)
if (lab == eh_return_stub_label)
;
else if ((next = next_nonnote_insn (lab)) != NULL
&& GET_CODE (next) == JUMP_INSN
&& (GET_CODE (PATTERN (next)) == ADDR_VEC
|| GET_CODE (PATTERN (next)) == ADDR_DIFF_VEC))
;
else
label_value_list
= alloc_EXPR_LIST (0, XEXP (note, 0), label_value_list);
}
else if (REG_NOTE_KIND (note) == REG_LIBCALL)
in_libcall++;
else if (REG_NOTE_KIND (note) == REG_RETVAL)
in_libcall--;
}
else if ((next = next_nonnote_insn (lab)) != NULL
&& GET_CODE (next) == JUMP_INSN
&& (GET_CODE (PATTERN (next)) == ADDR_VEC
|| GET_CODE (PATTERN (next)) == ADDR_DIFF_VEC))
;
else
label_value_list
= alloc_EXPR_LIST (0, XEXP (note, 0), label_value_list);
}
}
}

View File

@ -2758,19 +2758,21 @@ emit_libcall_block (insns, target, result, equiv)
rtx prev, next, first, last, insn;
/* look for any CALL_INSNs in this sequence, and attach a REG_EH_REGION
reg note to indicate that this call cannot throw. (Unless there is
already a REG_EH_REGION note.) */
reg note to indicate that this call cannot throw or execute a nonlocal
goto. (Unless there is already a REG_EH_REGION note, in which case
we update it.) */
for (insn = insns; insn; insn = NEXT_INSN (insn))
{
if (GET_CODE (insn) == CALL_INSN)
{
rtx note = find_reg_note (insn, REG_EH_REGION, NULL_RTX);
if (note == NULL_RTX)
REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_EH_REGION, GEN_INT (-1),
REG_NOTES (insn));
}
}
if (GET_CODE (insn) == CALL_INSN)
{
rtx note = find_reg_note (insn, REG_EH_REGION, NULL_RTX);
if (note != 0)
XEXP (note, 0) = GEN_INT (-1);
else
REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_EH_REGION, GEN_INT (-1),
REG_NOTES (insn));
}
/* First emit all insns that set pseudos. Remove them from the list as
we go. Avoid insns that set pseudos which were referenced in previous