Fix IA-64 libada build failure, abnormal call edges on non-call insns.

PR rtl-optimization/17356
* cfgrtl.c (purge_dead_edges): Check for EDGE_ABNORMAL_CALL before
checking for EDGE_EH.

From-SVN: r105533
This commit is contained in:
James E Wilson 2005-10-17 17:22:53 -07:00 committed by Jim Wilson
parent 55ae1d648c
commit 1b2914a086
2 changed files with 16 additions and 6 deletions

View File

@ -1,3 +1,9 @@
2005-10-17 James E Wilson <wilson@specifix.com>
PR rtl-optimization/17356
* cfgrtl.c (purge_dead_edges): Check for EDGE_ABNORMAL_CALL before
checking for EDGE_EH.
2005-10-17 Eric Botcazou <ebotcazou@libertysurf.fr>
* config/sparc/sparc.c (function_arg_slotno): In 64-bit mode, align

View File

@ -2300,19 +2300,23 @@ purge_dead_edges (basic_block bb)
/* Cleanup abnormal edges caused by exceptions or non-local gotos. */
for (ei = ei_start (bb->succs); (e = ei_safe_edge (ei)); )
{
if (e->flags & EDGE_EH)
/* We must check for the most restrictive condition first. Since
an abnormal call edge is always an EH edge, but an EH edge is not
always an abnormal call edge, we must check for an abnormal call
edge first. */
if (e->flags & EDGE_ABNORMAL_CALL)
{
if (can_throw_internal (BB_END (bb)))
if (CALL_P (BB_END (bb))
&& (! (note = find_reg_note (insn, REG_EH_REGION, NULL))
|| INTVAL (XEXP (note, 0)) >= 0))
{
ei_next (&ei);
continue;
}
}
else if (e->flags & EDGE_ABNORMAL_CALL)
else if (e->flags & EDGE_EH)
{
if (CALL_P (BB_END (bb))
&& (! (note = find_reg_note (insn, REG_EH_REGION, NULL))
|| INTVAL (XEXP (note, 0)) >= 0))
if (can_throw_internal (BB_END (bb)))
{
ei_next (&ei);
continue;