From: Andrew MacLeod Date: Wed, 3 Nov 2004 18:56:35 +0000 (+0000) Subject: re PR tree-optimization/18270 (internal compiler error: in tree_redirect_edge_and_bra... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b00e4c238b56689ec1e81a647a0147bf9ff79306;p=gcc.git re PR tree-optimization/18270 (internal compiler error: in tree_redirect_edge_and_branch, at tree-cfg.c:4146) 2004-11-03 Andrew MacLeod PR tree-optimization/18270 * tree-outof-ssa.c (analyze_edges_for_bb): If a block has any incoming abnormal edges, simply commit any pending stmts on all incoming edges. From-SVN: r90031 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index accb1339d92..e8208f5cc6f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2004-11-03 Andrew MacLeod + + PR tree-optimization/18270 + * tree-outof-ssa.c (analyze_edges_for_bb): If a block has incoming + abnormal edges, commit all pending stmts on incoming edges. + 2004-11-03 Ulrich Weigand * tree-ssa-loop-ivopts.c (get_address_cost): Offset zero does not diff --git a/gcc/tree-outof-ssa.c b/gcc/tree-outof-ssa.c index 6d33c4731cf..074ca5b28fa 100644 --- a/gcc/tree-outof-ssa.c +++ b/gcc/tree-outof-ssa.c @@ -2024,6 +2024,25 @@ analyze_edges_for_bb (basic_block bb, FILE *debug_file) bool is_label; count = 0; + + /* Blocks which contain at least one abnormal edge cannot use + make_forwarder_block. Look for these blocks, and commit any PENDING_STMTs + found on edges in these block. */ + have_opportunity = true; + FOR_EACH_EDGE (e, ei, bb->preds) + if (e->flags & EDGE_ABNORMAL) + { + have_opportunity = false; + break; + } + + if (!have_opportunity) + { + FOR_EACH_EDGE (e, ei, bb->preds) + if (PENDING_STMT (e)) + bsi_commit_one_edge_insert (e, NULL); + return false; + } /* Find out how many edges there are with interesting pending stmts on them. Commit the stmts on edges we are not interested in. */ FOR_EACH_EDGE (e, ei, bb->preds)