diff options
author | Jeff Law <law@redhat.com> | 2017-11-03 10:28:28 -0600 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 2017-11-03 10:28:28 -0600 |
commit | 2965f1274ce3c4a4af6f8183e4c20532a6d8d21a (patch) | |
tree | 4814bac5f4aad32e4d50b6ce78bfbbf51585bd5a /gcc/tree-ssa-dom.c | |
parent | 63626547937ea54b251ad9480b306d9f8e793a0c (diff) | |
download | gcc-2965f1274ce3c4a4af6f8183e4c20532a6d8d21a.zip gcc-2965f1274ce3c4a4af6f8183e4c20532a6d8d21a.tar.gz gcc-2965f1274ce3c4a4af6f8183e4c20532a6d8d21a.tar.bz2 |
cfganal.c (single_pred_edge_ignoring_loop_edges): New function extracted from tree-ssa-dom.c.
* cfganal.c (single_pred_edge_ignoring_loop_edges): New function
extracted from tree-ssa-dom.c.
* cfganal.h (single_pred_edge_ignoring_loop_edges): Prototype.
* tree-ssa-dom.c (single_incoming_edge_ignoring_loop_edges): Remove.
(record_equivalences_from_incoming_edge): Add additional argument
to single_pred_edge_ignoring_loop_edges call.
* tree-ssa-uncprop.c (single_incoming_edge_ignoring_loop_edges): Remove.
(uncprop_dom_walker::before_dom_children): Add additional argument
to single_pred_edge_ignoring_loop_edges call.
* tree-ssa-sccvn.c (sccvn_dom_walker::before_dom_children): Use
single_pred_edge_ignoring_loop_edges rather than open coding.
* tree-vrp.c (evrp_dom_walker::before_dom_children): Similarly.
From-SVN: r254383
Diffstat (limited to 'gcc/tree-ssa-dom.c')
-rw-r--r-- | gcc/tree-ssa-dom.c | 36 |
1 files changed, 1 insertions, 35 deletions
diff --git a/gcc/tree-ssa-dom.c b/gcc/tree-ssa-dom.c index 06be69a..eb85b4a 100644 --- a/gcc/tree-ssa-dom.c +++ b/gcc/tree-ssa-dom.c @@ -113,7 +113,6 @@ static void eliminate_redundant_computations (gimple_stmt_iterator *, class avail_exprs_stack *); static void record_equivalences_from_stmt (gimple *, int, class avail_exprs_stack *); -static edge single_incoming_edge_ignoring_loop_edges (basic_block); static void dump_dominator_optimization_stats (FILE *file, hash_table<expr_elt_hasher> *); @@ -1057,39 +1056,6 @@ record_equivalences_from_phis (basic_block bb) } } -/* Ignoring loop backedges, if BB has precisely one incoming edge then - return that edge. Otherwise return NULL. */ -static edge -single_incoming_edge_ignoring_loop_edges (basic_block bb) -{ - edge retval = NULL; - edge e; - edge_iterator ei; - - FOR_EACH_EDGE (e, ei, bb->preds) - { - /* A loop back edge can be identified by the destination of - the edge dominating the source of the edge. */ - if (dominated_by_p (CDI_DOMINATORS, e->src, e->dest)) - continue; - - /* We can safely ignore edges that are not executable. */ - if ((e->flags & EDGE_EXECUTABLE) == 0) - continue; - - /* If we have already seen a non-loop edge, then we must have - multiple incoming non-loop edges and thus we return NULL. */ - if (retval) - return NULL; - - /* This is the first non-loop incoming edge we have found. Record - it. */ - retval = e; - } - - return retval; -} - /* Record any equivalences created by the incoming edge to BB into CONST_AND_COPIES and AVAIL_EXPRS_STACK. If BB has more than one incoming edge, then no equivalence is created. */ @@ -1107,7 +1073,7 @@ record_equivalences_from_incoming_edge (basic_block bb, the parent was followed. */ parent = get_immediate_dominator (CDI_DOMINATORS, bb); - e = single_incoming_edge_ignoring_loop_edges (bb); + e = single_pred_edge_ignoring_loop_edges (bb, true); /* If we had a single incoming edge from our parent block, then enter any data associated with the edge into our tables. */ |