aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-dom.c
diff options
context:
space:
mode:
authorJeff Law <law@redhat.com>2017-11-03 10:28:28 -0600
committerJeff Law <law@gcc.gnu.org>2017-11-03 10:28:28 -0600
commit2965f1274ce3c4a4af6f8183e4c20532a6d8d21a (patch)
tree4814bac5f4aad32e4d50b6ce78bfbbf51585bd5a /gcc/tree-ssa-dom.c
parent63626547937ea54b251ad9480b306d9f8e793a0c (diff)
downloadgcc-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.c36
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. */