From: law Date: Wed, 9 Mar 2005 02:42:46 +0000 (+0000) Subject: * tree-cfg.c (cleanup_control_flow): If removal of a computed X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3e269635f38cafcefb53d6cbd2c31a113546b55d;p=thirdparty%2Fgcc.git * 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@96160 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 938d7e3b436e..02bcdd2fb7f0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2005-03-08 Jeff Law + + * 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 * c-common.c (c_do_switch_warnings): Comment fix. diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index 7622bf77190c..be7ee56bdb49 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -2148,6 +2148,7 @@ cleanup_control_flow (void) tree label; edge_iterator ei; basic_block target_block; + bool removed_edge = false; /* First look at all the outgoing edges. Delete any outgoing edges which do not go to the right block. For the one @@ -2157,7 +2158,10 @@ cleanup_control_flow (void) for (ei = ei_start (bb->succs); (e = ei_safe_edge (ei)); ) { if (e->dest != target_block) - remove_edge (e); + { + removed_edge = true; + remove_edge (e); + } else { /* Turn off the EDGE_ABNORMAL flag. */ @@ -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 relevant information we need. */ bsi_remove (&bsi);