Commit 1b2914a0 by James E Wilson Committed by Jim Wilson

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
parent 55ae1d64
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> 2005-10-17 Eric Botcazou <ebotcazou@libertysurf.fr>
* config/sparc/sparc.c (function_arg_slotno): In 64-bit mode, align * config/sparc/sparc.c (function_arg_slotno): In 64-bit mode, align
......
...@@ -2300,19 +2300,23 @@ purge_dead_edges (basic_block bb) ...@@ -2300,19 +2300,23 @@ purge_dead_edges (basic_block bb)
/* Cleanup abnormal edges caused by exceptions or non-local gotos. */ /* Cleanup abnormal edges caused by exceptions or non-local gotos. */
for (ei = ei_start (bb->succs); (e = ei_safe_edge (ei)); ) 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); ei_next (&ei);
continue; continue;
} }
} }
else if (e->flags & EDGE_ABNORMAL_CALL) else if (e->flags & EDGE_EH)
{ {
if (CALL_P (BB_END (bb)) if (can_throw_internal (BB_END (bb)))
&& (! (note = find_reg_note (insn, REG_EH_REGION, NULL))
|| INTVAL (XEXP (note, 0)) >= 0))
{ {
ei_next (&ei); ei_next (&ei);
continue; continue;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment