* cfganal.c (flow_call_edges_add): Never split a libcall block.
From-SVN: r77410
This commit is contained in:
parent
1711adc261
commit
1a6dd8a2b8
@ -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>
|
2004-02-06 Daniel Berlin <dberlin@dberlin.org>
|
||||||
|
|
||||||
* dwarf2out.c (output_loc_list): Don't use deltas if we have
|
* dwarf2out.c (output_loc_list): Don't use deltas if we have
|
||||||
|
@ -333,6 +333,7 @@ flow_call_edges_add (sbitmap blocks)
|
|||||||
for (i = 0; i < last_bb; i++)
|
for (i = 0; i < last_bb; i++)
|
||||||
{
|
{
|
||||||
basic_block bb = BASIC_BLOCK (i);
|
basic_block bb = BASIC_BLOCK (i);
|
||||||
|
rtx libcall_end = NULL_RTX;
|
||||||
rtx insn;
|
rtx insn;
|
||||||
rtx prev_insn;
|
rtx prev_insn;
|
||||||
|
|
||||||
@ -350,9 +351,13 @@ flow_call_edges_add (sbitmap blocks)
|
|||||||
edge e;
|
edge e;
|
||||||
rtx split_at_insn = insn;
|
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
|
/* Don't split the block between a call and an insn that should
|
||||||
remain in the same block as the call. */
|
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)
|
while (split_at_insn != BB_END (bb)
|
||||||
&& keep_with_call_p (NEXT_INSN (split_at_insn)))
|
&& keep_with_call_p (NEXT_INSN (split_at_insn)))
|
||||||
split_at_insn = 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);
|
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))
|
if (insn == BB_HEAD (bb))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user