From b64e82394fd4ad74220946bdab73bee9ad63bc0a Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Tue, 18 Oct 2016 11:02:24 +0000 Subject: [PATCH] tree-vrp.c (evrp_dom_walker::before_dom_children): Handle not visited but non-executable predecessors. 2016-10-18 Richard Biener * tree-vrp.c (evrp_dom_walker::before_dom_children): Handle not visited but non-executable predecessors. Return taken edge. Simplify conditions and refactor propagation vs. folding step. * gcc.dg/tree-ssa/pr20318.c: Disable EVRP. * gcc.dg/tree-ssa/pr21001.c: Likewise. * gcc.dg/tree-ssa/pr21090.c: Likewise. * gcc.dg/tree-ssa/pr21294.c: Likewise. * gcc.dg/tree-ssa/pr21563.c: Likewise. * gcc.dg/tree-ssa/pr23744.c: Likewise. * gcc.dg/tree-ssa/pr25382.c: Likewise. * gcc.dg/tree-ssa/pr68431.c: Likewise. * gcc.dg/tree-ssa/vrp03.c: Likewise. * gcc.dg/tree-ssa/vrp06.c: Likewise. * gcc.dg/tree-ssa/vrp07.c: Likewise. * gcc.dg/tree-ssa/vrp09.c: Likewise. * gcc.dg/tree-ssa/vrp19.c: Likewise. * gcc.dg/tree-ssa/vrp20.c: Likewise. * gcc.dg/tree-ssa/vrp92.c: Likewise. * gcc.dg/pr68217.c: Likewise. * gcc.dg/predict-9.c: Likewise. * gcc.dg/tree-prof/val-prof-5.c: Adjust. * gcc.dg/predict-1.c: Likewise. From-SVN: r241300 --- gcc/ChangeLog | 6 + gcc/testsuite/ChangeLog | 22 ++++ gcc/testsuite/gcc.dg/pr68217.c | 3 +- gcc/testsuite/gcc.dg/predict-1.c | 2 +- gcc/testsuite/gcc.dg/predict-9.c | 2 +- gcc/testsuite/gcc.dg/tree-prof/val-prof-5.c | 2 +- gcc/testsuite/gcc.dg/tree-ssa/pr20318.c | 2 +- gcc/testsuite/gcc.dg/tree-ssa/pr21001.c | 2 +- gcc/testsuite/gcc.dg/tree-ssa/pr21090.c | 2 +- gcc/testsuite/gcc.dg/tree-ssa/pr21294.c | 2 +- gcc/testsuite/gcc.dg/tree-ssa/pr21563.c | 2 +- gcc/testsuite/gcc.dg/tree-ssa/pr23744.c | 2 +- gcc/testsuite/gcc.dg/tree-ssa/pr25382.c | 2 +- gcc/testsuite/gcc.dg/tree-ssa/pr68431.c | 2 +- gcc/testsuite/gcc.dg/tree-ssa/vrp03.c | 2 +- gcc/testsuite/gcc.dg/tree-ssa/vrp06.c | 2 +- gcc/testsuite/gcc.dg/tree-ssa/vrp07.c | 2 +- gcc/testsuite/gcc.dg/tree-ssa/vrp09.c | 2 +- gcc/testsuite/gcc.dg/tree-ssa/vrp19.c | 2 +- gcc/testsuite/gcc.dg/tree-ssa/vrp20.c | 2 +- gcc/testsuite/gcc.dg/tree-ssa/vrp92.c | 2 +- gcc/tree-vrp.c | 134 +++++++++++--------- 22 files changed, 119 insertions(+), 82 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9e986643c56..80c9870e7cb 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2016-10-18 Richard Biener + + * tree-vrp.c (evrp_dom_walker::before_dom_children): Handle + not visited but non-executable predecessors. Return taken edge. + Simplify conditions and refactor propagation vs. folding step. + 2016-10-18 Segher Boessenkool * config/rs6000/rs6000.c (rs6000_savres_strategy): Do not select diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6d57099bfc5..0ad84587141 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,25 @@ +2016-10-18 Richard Biener + + * gcc.dg/tree-ssa/pr20318.c: Disable EVRP. + * gcc.dg/tree-ssa/pr21001.c: Likewise. + * gcc.dg/tree-ssa/pr21090.c: Likewise. + * gcc.dg/tree-ssa/pr21294.c: Likewise. + * gcc.dg/tree-ssa/pr21563.c: Likewise. + * gcc.dg/tree-ssa/pr23744.c: Likewise. + * gcc.dg/tree-ssa/pr25382.c: Likewise. + * gcc.dg/tree-ssa/pr68431.c: Likewise. + * gcc.dg/tree-ssa/vrp03.c: Likewise. + * gcc.dg/tree-ssa/vrp06.c: Likewise. + * gcc.dg/tree-ssa/vrp07.c: Likewise. + * gcc.dg/tree-ssa/vrp09.c: Likewise. + * gcc.dg/tree-ssa/vrp19.c: Likewise. + * gcc.dg/tree-ssa/vrp20.c: Likewise. + * gcc.dg/tree-ssa/vrp92.c: Likewise. + * gcc.dg/pr68217.c: Likewise. + * gcc.dg/predict-9.c: Likewise. + * gcc.dg/tree-prof/val-prof-5.c: Adjust. + * gcc.dg/predict-1.c: Likewise. + 2016-10-17 Jerry DeLisle * gfortran.dg/dtio_17.f90: New test. diff --git a/gcc/testsuite/gcc.dg/pr68217.c b/gcc/testsuite/gcc.dg/pr68217.c index 426a99a6b61..c5b0d1ff199 100644 --- a/gcc/testsuite/gcc.dg/pr68217.c +++ b/gcc/testsuite/gcc.dg/pr68217.c @@ -1,6 +1,5 @@ - /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-vrp1" } */ +/* { dg-options "-O2 -fdisable-tree-evrp -fdump-tree-vrp1" } */ int foo (void) { diff --git a/gcc/testsuite/gcc.dg/predict-1.c b/gcc/testsuite/gcc.dg/predict-1.c index 10d62bac5d5..65f6bad9d7c 100644 --- a/gcc/testsuite/gcc.dg/predict-1.c +++ b/gcc/testsuite/gcc.dg/predict-1.c @@ -23,4 +23,4 @@ void foo (int bound) } } -/* { dg-final { scan-tree-dump-times "guess loop iv compare heuristics of edge\[^:\]*: 2.0%" 5 "profile_estimate"} } */ +/* { dg-final { scan-tree-dump-times "guess loop iv compare heuristics of edge\[^:\]*: 2.0%" 4 "profile_estimate"} } */ diff --git a/gcc/testsuite/gcc.dg/predict-9.c b/gcc/testsuite/gcc.dg/predict-9.c index 196e31c60ee..ec467519504 100644 --- a/gcc/testsuite/gcc.dg/predict-9.c +++ b/gcc/testsuite/gcc.dg/predict-9.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-profile_estimate" } */ +/* { dg-options "-O2 -fdisable-tree-evrp -fdump-tree-profile_estimate" } */ extern int global; extern int global2; diff --git a/gcc/testsuite/gcc.dg/tree-prof/val-prof-5.c b/gcc/testsuite/gcc.dg/tree-prof/val-prof-5.c index caf97ce4f87..7f4a15b7786 100644 --- a/gcc/testsuite/gcc.dg/tree-prof/val-prof-5.c +++ b/gcc/testsuite/gcc.dg/tree-prof/val-prof-5.c @@ -6,7 +6,7 @@ main() { int i; for (i = 0; i < 1000; i++) - if (a[i]) + if (a[i] != 1) a[i]/=b; else a[i]/=b; diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr20318.c b/gcc/testsuite/gcc.dg/tree-ssa/pr20318.c index 41f569ef001..80fd7266871 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/pr20318.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr20318.c @@ -1,5 +1,5 @@ /* { dg-do compile { target { ! keeps_null_pointer_checks } } } */ -/* { dg-options "-O2 -fdump-tree-original -fdump-tree-vrp1 -fdelete-null-pointer-checks" } */ +/* { dg-options "-O2 -fdump-tree-original -fdump-tree-vrp1 -fdelete-null-pointer-checks -fdisable-tree-evrp" } */ extern int* f(int) __attribute__((returns_nonnull)); extern void eliminate (); diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr21001.c b/gcc/testsuite/gcc.dg/tree-ssa/pr21001.c index 482d530e9ab..719360a015f 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/pr21001.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr21001.c @@ -5,7 +5,7 @@ range information out of the conditional. */ /* { dg-do compile } */ -/* { dg-options "-O2 -fno-tree-dominator-opts -fno-tree-fre -fdump-tree-vrp1-details" } */ +/* { dg-options "-O2 -fno-tree-dominator-opts -fno-tree-fre -fdisable-tree-evrp -fdump-tree-vrp1-details" } */ int foo (int a) diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr21090.c b/gcc/testsuite/gcc.dg/tree-ssa/pr21090.c index 26d0d559031..3909adb72d4 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/pr21090.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr21090.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-vrp1 -fdelete-null-pointer-checks" } */ +/* { dg-options "-O2 -fdisable-tree-evrp -fdump-tree-vrp1 -fdelete-null-pointer-checks" } */ int g, h; diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr21294.c b/gcc/testsuite/gcc.dg/tree-ssa/pr21294.c index f694fb2caf0..cc7d4cdf338 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/pr21294.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr21294.c @@ -4,7 +4,7 @@ allows us to eliminate the second "if" statement. */ /* { dg-do compile } */ -/* { dg-options "-O2 -fno-tree-dominator-opts -fdump-tree-vrp1-details" } */ +/* { dg-options "-O2 -fno-tree-dominator-opts -fdisable-tree-evrp -fdump-tree-vrp1-details" } */ struct f { int i; diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr21563.c b/gcc/testsuite/gcc.dg/tree-ssa/pr21563.c index 2cc2599700c..9c67a3acb46 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/pr21563.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr21563.c @@ -2,7 +2,7 @@ Make sure VRP folds the second "if" statement. */ /* { dg-do compile } */ -/* { dg-options "-O2 -fno-tree-dominator-opts -fdump-tree-vrp1-details" } */ +/* { dg-options "-O2 -fno-tree-dominator-opts -fdisable-tree-evrp -fdump-tree-vrp1-details" } */ int foo (int a) diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr23744.c b/gcc/testsuite/gcc.dg/tree-ssa/pr23744.c index 9d662f25c31..3385aa1e424 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/pr23744.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr23744.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fno-tree-ccp -fdump-tree-vrp1" } */ +/* { dg-options "-O2 -fno-tree-ccp -fdisable-tree-evrp -fdump-tree-vrp1" } */ void h (void); diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr25382.c b/gcc/testsuite/gcc.dg/tree-ssa/pr25382.c index dcf91480673..d74765551c2 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/pr25382.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr25382.c @@ -3,7 +3,7 @@ Check that VRP now gets ranges from BIT_AND_EXPRs. */ /* { dg-do compile } */ -/* { dg-options "-O2 -fno-tree-ccp -fdump-tree-vrp1" } */ +/* { dg-options "-O2 -fno-tree-ccp -fdisable-tree-evrp -fdump-tree-vrp1" } */ int foo (int a) diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr68431.c b/gcc/testsuite/gcc.dg/tree-ssa/pr68431.c index 3bd3843ed34..9c42563b67b 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/pr68431.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr68431.c @@ -1,5 +1,5 @@ /* PR tree-optimization/68431 */ -/* { dg-options "-O2 -fdump-tree-vrp1-details" } */ +/* { dg-options "-O2 -fdisable-tree-evrp -fdump-tree-vrp1-details" } */ unsigned int x = 1; int diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp03.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp03.c index 59146bf2b62..bafb65a53d6 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/vrp03.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp03.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-vrp1" } */ +/* { dg-options "-O2 -fdisable-tree-evrp -fdump-tree-vrp1" } */ struct A { diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp06.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp06.c index c4ce1703f55..a872bc43731 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/vrp06.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp06.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-vrp1" } */ +/* { dg-options "-O2 -fdisable-tree-evrp -fdump-tree-vrp1" } */ int baz (void); diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp07.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp07.c index a5bd6708d9f..0f3f280e4e1 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/vrp07.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp07.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fno-tree-fre -fdump-tree-vrp1-details -fdelete-null-pointer-checks" } */ +/* { dg-options "-O2 -fno-tree-fre -fdisable-tree-evrp -fdump-tree-vrp1-details -fdelete-null-pointer-checks" } */ int foo (int i, int *p) diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp09.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp09.c index d42a566a99f..56cc50c5f1d 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/vrp09.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp09.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fno-tree-fre -fdump-tree-vrp1 -std=gnu89" } */ +/* { dg-options "-O2 -fno-tree-fre -fdisable-tree-evrp -fdump-tree-vrp1 -std=gnu89" } */ foo (int *p) { diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp19.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp19.c index cecacb66563..40373fde163 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/vrp19.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp19.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-fwrapv -O1 -ftree-vrp -fdump-tree-vrp1" } */ +/* { dg-options "-fwrapv -O1 -ftree-vrp -fdisable-tree-evrp -fdump-tree-vrp1" } */ #include extern void abort (); diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp20.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp20.c index 60d17313152..4a3b0d73648 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/vrp20.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp20.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-fwrapv -O1 -fno-tree-fre -ftree-vrp -fdump-tree-vrp1" } */ +/* { dg-options "-fwrapv -O1 -fno-tree-fre -fdisable-tree-evrp -ftree-vrp -fdump-tree-vrp1" } */ extern void abort (); extern void exit (int); diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp92.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp92.c index 5d5375073e6..213aa47609a 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/vrp92.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp92.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-vrp1-details -fdisable-tree-ethread" } */ +/* { dg-options "-O2 -fdisable-tree-evrp -fdump-tree-vrp1-details -fdisable-tree-ethread" } */ void bar (void); int foo (int i, int j) diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c index 31f4f25cced..6a7adaeff83 100644 --- a/gcc/tree-vrp.c +++ b/gcc/tree-vrp.c @@ -10747,12 +10747,13 @@ evrp_dom_walker::before_dom_children (basic_block bb) gimple_stmt_iterator gsi; edge e; edge_iterator ei; - bool has_unvisived_preds = false; + bool has_unvisited_preds = false; FOR_EACH_EDGE (e, ei, bb->preds) - if (!(e->src->flags & BB_VISITED)) + if (e->flags & EDGE_EXECUTABLE + && !(e->src->flags & BB_VISITED)) { - has_unvisived_preds = true; + has_unvisited_preds = true; break; } @@ -10762,7 +10763,7 @@ evrp_dom_walker::before_dom_children (basic_block bb) gphi *phi = gpi.phi (); tree lhs = PHI_RESULT (phi); value_range vr_result = VR_INITIALIZER; - if (!has_unvisived_preds + if (!has_unvisited_preds && stmt_interesting_for_vrp (phi)) extract_range_from_phi_node (phi, &vr_result); else @@ -10770,89 +10771,98 @@ evrp_dom_walker::before_dom_children (basic_block bb) update_value_range (lhs, &vr_result); } + edge taken_edge = NULL; + /* Visit all other stmts and discover any new VRs possible. */ for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi)) { gimple *stmt = gsi_stmt (gsi); - edge taken_edge; tree output = NULL_TREE; gimple *old_stmt = stmt; bool was_noreturn = (is_gimple_call (stmt) && gimple_call_noreturn_p (stmt)); - /* TODO, if found taken_edge, we should visit (return it) and travel - again to improve VR as done in DOM/SCCVN optimizations. It should - be done carefully as stmts might prematurely leave a BB like - in EH. */ - if (stmt_interesting_for_vrp (stmt)) + if (gcond *cond = dyn_cast (stmt)) + { + vrp_visit_cond_stmt (cond, &taken_edge); + if (taken_edge) + { + if (taken_edge->flags & EDGE_TRUE_VALUE) + gimple_cond_make_true (cond); + else if (taken_edge->flags & EDGE_FALSE_VALUE) + gimple_cond_make_false (cond); + else + gcc_unreachable (); + } + } + else if (stmt_interesting_for_vrp (stmt)) { + edge taken_edge; value_range vr = VR_INITIALIZER; extract_range_from_stmt (stmt, &taken_edge, &output, &vr); if (output && (vr.type == VR_RANGE || vr.type == VR_ANTI_RANGE)) - update_value_range (output, &vr); - else - set_defs_to_varying (stmt); + { + update_value_range (output, &vr); + vr = *get_value_range (output); - /* Try folding stmts with the VR discovered. */ - bool did_replace - = replace_uses_in (stmt, - op_with_constant_singleton_value_range); - if (fold_stmt (&gsi, follow_single_use_edges) - || did_replace) - update_stmt (gsi_stmt (gsi)); - if (did_replace) - { - /* If we cleaned up EH information from the statement, - remove EH edges. */ - if (maybe_clean_or_replace_eh_stmt (old_stmt, stmt)) - bitmap_set_bit (need_eh_cleanup, bb->index); - - /* If we turned a not noreturn call into a noreturn one - schedule it for fixup. */ - if (!was_noreturn - && is_gimple_call (stmt) - && gimple_call_noreturn_p (stmt)) - stmts_to_fixup.safe_push (stmt); - - if (gimple_assign_single_p (stmt)) + /* Set the SSA with the value range. */ + if (INTEGRAL_TYPE_P (TREE_TYPE (output))) { - tree rhs = gimple_assign_rhs1 (stmt); - if (TREE_CODE (rhs) == ADDR_EXPR) - recompute_tree_invariant_for_addr_expr (rhs); + if ((vr.type == VR_RANGE + || vr.type == VR_ANTI_RANGE) + && (TREE_CODE (vr.min) == INTEGER_CST) + && (TREE_CODE (vr.max) == INTEGER_CST)) + set_range_info (output, vr.type, vr.min, vr.max); } + else if (POINTER_TYPE_P (TREE_TYPE (output)) + && ((vr.type == VR_RANGE + && range_includes_zero_p (vr.min, + vr.max) == 0) + || (vr.type == VR_ANTI_RANGE + && range_includes_zero_p (vr.min, + vr.max) == 1))) + set_ptr_nonnull (output); } + else + set_defs_to_varying (stmt); + } + else + set_defs_to_varying (stmt); + + /* Try folding stmts with the VR discovered. */ + bool did_replace + = replace_uses_in (stmt, op_with_constant_singleton_value_range); + if (fold_stmt (&gsi, follow_single_use_edges) + || did_replace) + update_stmt (gsi_stmt (gsi)); + + if (did_replace) + { + /* If we cleaned up EH information from the statement, + remove EH edges. */ + if (maybe_clean_or_replace_eh_stmt (old_stmt, stmt)) + bitmap_set_bit (need_eh_cleanup, bb->index); - def_operand_p def_p = SINGLE_SSA_DEF_OPERAND (stmt, SSA_OP_DEF); - /* Set the SSA with the value range. */ - if (def_p - && TREE_CODE (DEF_FROM_PTR (def_p)) == SSA_NAME) + /* If we turned a not noreturn call into a noreturn one + schedule it for fixup. */ + if (!was_noreturn + && is_gimple_call (stmt) + && gimple_call_noreturn_p (stmt)) + stmts_to_fixup.safe_push (stmt); + + if (gimple_assign_single_p (stmt)) { - tree def = DEF_FROM_PTR (def_p); - value_range *vr = get_value_range (def); - - if (INTEGRAL_TYPE_P (TREE_TYPE (DEF_FROM_PTR (def_p))) - && (vr->type == VR_RANGE - || vr->type == VR_ANTI_RANGE) - && (TREE_CODE (vr->min) == INTEGER_CST) - && (TREE_CODE (vr->max) == INTEGER_CST)) - set_range_info (def, vr->type, vr->min, vr->max); - else if (POINTER_TYPE_P (TREE_TYPE (DEF_FROM_PTR (def_p))) - && ((vr->type == VR_RANGE - && range_includes_zero_p (vr->min, - vr->max) == 0) - || (vr->type == VR_ANTI_RANGE - && range_includes_zero_p (vr->min, - vr->max) == 1))) - set_ptr_nonnull (def); + tree rhs = gimple_assign_rhs1 (stmt); + if (TREE_CODE (rhs) == ADDR_EXPR) + recompute_tree_invariant_for_addr_expr (rhs); } } - else - set_defs_to_varying (stmt); } bb->flags |= BB_VISITED; - return NULL; + + return taken_edge; } /* Restore/pop VRs valid only for BB when we leave BB. */ -- 2.30.2