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-ssa-propagate.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-ssa-propagate.c')
-rw-r--r-- | gcc/tree-ssa-propagate.c | 14 |
1 files changed, 4 insertions, 10 deletions
diff --git a/gcc/tree-ssa-propagate.c b/gcc/tree-ssa-propagate.c index cd1cbd2..0f940cc 100644 --- a/gcc/tree-ssa-propagate.c +++ b/gcc/tree-ssa-propagate.c @@ -1035,15 +1035,6 @@ substitute_and_fold_dom_walker::before_dom_children (basic_block bb) { bool did_replace; gimple *stmt = gsi_stmt (i); - enum gimple_code code = gimple_code (stmt); - - /* Ignore ASSERT_EXPRs. They are used by VRP to generate - range information for names and they are discarded - afterwards. */ - - if (code == GIMPLE_ASSIGN - && TREE_CODE (gimple_assign_rhs1 (stmt)) == ASSERT_EXPR) - continue; /* No point propagating into a stmt we have a value for we can propagate into all uses. Mark it for removal instead. */ @@ -1056,7 +1047,10 @@ substitute_and_fold_dom_walker::before_dom_children (basic_block bb) && sprime != lhs && may_propagate_copy (lhs, sprime) && !stmt_could_throw_p (stmt) - && !gimple_has_side_effects (stmt)) + && !gimple_has_side_effects (stmt) + /* We have to leave ASSERT_EXPRs around for jump-threading. */ + && (!is_gimple_assign (stmt) + || gimple_assign_rhs_code (stmt) != ASSERT_EXPR)) { stmts_to_remove.safe_push (stmt); continue; |