Commit b0c32a73 by Jeff Law Committed by Jeff Law

tree-cfg.c (cleanup_control_flow): If removal of a computed goto results in the…

tree-cfg.c (cleanup_control_flow): If removal of a computed goto results in the removal of edges in the CFG...

        * tree-cfg.c (cleanup_control_flow): If removal of a computed
        goto results in the removal of edges in the CFG, then we need
        to recompute dominators.

From-SVN: r96160
parent b735d54b
2005-03-08 Jeff Law <law@redhat.com>
* tree-cfg.c (cleanup_control_flow): If removal of a computed
goto results in the removal of edges in the CFG, then we need
to recompute dominators.
2005-03-09 Ben Elliston <bje@au.ibm.com> 2005-03-09 Ben Elliston <bje@au.ibm.com>
* c-common.c (c_do_switch_warnings): Comment fix. * c-common.c (c_do_switch_warnings): Comment fix.
......
...@@ -2148,6 +2148,7 @@ cleanup_control_flow (void) ...@@ -2148,6 +2148,7 @@ cleanup_control_flow (void)
tree label; tree label;
edge_iterator ei; edge_iterator ei;
basic_block target_block; basic_block target_block;
bool removed_edge = false;
/* First look at all the outgoing edges. Delete any outgoing /* First look at all the outgoing edges. Delete any outgoing
edges which do not go to the right block. For the one edges which do not go to the right block. For the one
...@@ -2157,7 +2158,10 @@ cleanup_control_flow (void) ...@@ -2157,7 +2158,10 @@ cleanup_control_flow (void)
for (ei = ei_start (bb->succs); (e = ei_safe_edge (ei)); ) for (ei = ei_start (bb->succs); (e = ei_safe_edge (ei)); )
{ {
if (e->dest != target_block) if (e->dest != target_block)
remove_edge (e); {
removed_edge = true;
remove_edge (e);
}
else else
{ {
/* Turn off the EDGE_ABNORMAL flag. */ /* Turn off the EDGE_ABNORMAL flag. */
...@@ -2169,6 +2173,11 @@ cleanup_control_flow (void) ...@@ -2169,6 +2173,11 @@ cleanup_control_flow (void)
} }
} }
/* If we removed one or more edges, then we will need to fix the
dominators. It may be possible to incrementally update them. */
if (removed_edge)
free_dominance_info (CDI_DOMINATORS);
/* Remove the GOTO_EXPR as it is not needed. The CFG has all the /* Remove the GOTO_EXPR as it is not needed. The CFG has all the
relevant information we need. */ relevant information we need. */
bsi_remove (&bsi); bsi_remove (&bsi);
......
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