diff options
author | Richard Biener <rguenther@suse.de> | 2016-10-12 07:10:07 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2016-10-12 07:10:07 +0000 |
commit | 8a7c91cd629edc20ddefe13bc8d0872a18a9ad9a (patch) | |
tree | 3d395f1318b558b7474c2796923f9da4f2bd0a23 /gcc/tree-vrp.c | |
parent | 7dc2f5f1236a0f1544c756c46a5cd06491e96934 (diff) | |
download | gcc-8a7c91cd629edc20ddefe13bc8d0872a18a9ad9a.zip gcc-8a7c91cd629edc20ddefe13bc8d0872a18a9ad9a.tar.gz gcc-8a7c91cd629edc20ddefe13bc8d0872a18a9ad9a.tar.bz2 |
2016-10-12 Richard Biener <rguenther@suse.de>
* tree-ssa-propagate.c
(substitute_and_fold_dom_walker::before_dom_children): Do not
ignore ASSERT_EXPRs but only preserve them.
* tree-vrp.c (remove_range_assertions): Deal with ASSERT_EXPRs
that have been propagated into.
(vrp_finalize): Enable DCE for substitute_and_fold.
* gcc.dg/tree-ssa/vrp35.c: Adjust.
* gcc.dg/tree-ssa/vrp36.c: Likewise.
* gcc.dg/tree-ssa/vrp46.c: Likewise.
From-SVN: r241021
Diffstat (limited to 'gcc/tree-vrp.c')
-rw-r--r-- | gcc/tree-vrp.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c index e46f7fc..8d5fa66 100644 --- a/gcc/tree-vrp.c +++ b/gcc/tree-vrp.c @@ -6894,9 +6894,9 @@ remove_range_assertions (void) imm_use_iterator iter; var = ASSERT_EXPR_VAR (rhs); - gcc_assert (TREE_CODE (var) == SSA_NAME); - if (!POINTER_TYPE_P (TREE_TYPE (lhs)) + if (TREE_CODE (var) == SSA_NAME + && !POINTER_TYPE_P (TREE_TYPE (lhs)) && SSA_NAME_RANGE_INFO (lhs)) { if (is_unreachable == -1) @@ -6928,8 +6928,11 @@ remove_range_assertions (void) /* Propagate the RHS into every use of the LHS. */ FOR_EACH_IMM_USE_STMT (use_stmt, iter, lhs) - FOR_EACH_IMM_USE_ON_STMT (use_p, iter) - SET_USE (use_p, var); + { + FOR_EACH_IMM_USE_ON_STMT (use_p, iter) + SET_USE (use_p, var); + update_stmt (use_stmt); + } /* And finally, remove the copy, it is not needed. */ gsi_remove (&si, true); @@ -10611,7 +10614,7 @@ vrp_finalize (bool warn_array_bounds_p) } substitute_and_fold (op_with_constant_singleton_value_range, - vrp_fold_stmt, false); + vrp_fold_stmt, true); if (warn_array_bounds && warn_array_bounds_p) check_all_array_refs (); |