mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-14 00:17:37 +08:00
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:
parent
a46c7e85d8
commit
c29ea88a1d
@ -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
|
||||
|
49
gcc/flow.c
49
gcc/flow.c
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
24
gcc/optabs.c
24
gcc/optabs.c
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user