* cfganal.c (flow_call_edges_add): Never split a libcall block.

From-SVN: r77410
This commit is contained in:
Ulrich Weigand 2004-02-06 18:31:33 +00:00 committed by Ulrich Weigand
parent 1711adc261
commit 1a6dd8a2b8
2 changed files with 18 additions and 1 deletions

View File

@ -1,3 +1,7 @@
2004-02-06 Ulrich Weigand <uweigand@de.ibm.com>
* cfganal.c (flow_call_edges_add): Never split a libcall block.
2004-02-06 Daniel Berlin <dberlin@dberlin.org>
* dwarf2out.c (output_loc_list): Don't use deltas if we have

View File

@ -333,6 +333,7 @@ flow_call_edges_add (sbitmap blocks)
for (i = 0; i < last_bb; i++)
{
basic_block bb = BASIC_BLOCK (i);
rtx libcall_end = NULL_RTX;
rtx insn;
rtx prev_insn;
@ -350,9 +351,13 @@ flow_call_edges_add (sbitmap blocks)
edge e;
rtx split_at_insn = insn;
/* Don't split libcalls. */
if (libcall_end)
split_at_insn = libcall_end;
/* Don't split the block between a call and an insn that should
remain in the same block as the call. */
if (GET_CODE (insn) == CALL_INSN)
else if (GET_CODE (insn) == CALL_INSN)
while (split_at_insn != BB_END (bb)
&& keep_with_call_p (NEXT_INSN (split_at_insn)))
split_at_insn = NEXT_INSN (split_at_insn);
@ -381,6 +386,14 @@ flow_call_edges_add (sbitmap blocks)
make_edge (bb, EXIT_BLOCK_PTR, EDGE_FAKE);
}
/* Watch out for REG_LIBCALL/REG_RETVAL notes so that we know
whether we are currently in a libcall or not. Remember that
we are scanning backwards! */
if (find_reg_note (insn, REG_RETVAL, NULL_RTX))
libcall_end = insn;
if (find_reg_note (insn, REG_LIBCALL, NULL_RTX))
libcall_end = NULL_RTX;
if (insn == BB_HEAD (bb))
break;
}