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-vrp.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-vrp.c')
-rw-r--r-- | gcc/tree-vrp.c | 24 |
1 files changed, 5 insertions, 19 deletions
diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c index 63ee156..541c5c4 100644 --- a/gcc/tree-vrp.c +++ b/gcc/tree-vrp.c @@ -10970,33 +10970,17 @@ evrp_dom_walker::try_find_new_range (tree name, edge evrp_dom_walker::before_dom_children (basic_block bb) { - tree op0 = NULL_TREE; - edge_iterator ei; - edge e; - if (dump_file && (dump_flags & TDF_DETAILS)) fprintf (dump_file, "Visiting BB%d\n", bb->index); stack.safe_push (std::make_pair (NULL_TREE, (value_range *)NULL)); - edge pred_e = NULL; - FOR_EACH_EDGE (e, ei, bb->preds) - { - /* Ignore simple backedges from this to allow recording conditions - in loop headers. */ - if (dominated_by_p (CDI_DOMINATORS, e->src, e->dest)) - continue; - if (! pred_e) - pred_e = e; - else - { - pred_e = NULL; - break; - } - } + edge pred_e = single_pred_edge_ignoring_loop_edges (bb, false); if (pred_e) { gimple *stmt = last_stmt (pred_e->src); + tree op0 = NULL_TREE; + if (stmt && gimple_code (stmt) == GIMPLE_COND && (op0 = gimple_cond_lhs (stmt)) @@ -11040,6 +11024,8 @@ evrp_dom_walker::before_dom_children (basic_block bb) /* Visit PHI stmts and discover any new VRs possible. */ bool has_unvisited_preds = false; + edge_iterator ei; + edge e; FOR_EACH_EDGE (e, ei, bb->preds) if (e->flags & EDGE_EXECUTABLE && !(e->src->flags & BB_VISITED)) |