diff options
author | Richard Biener <rguenther@suse.de> | 2016-11-28 15:03:55 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2016-11-28 15:03:55 +0000 |
commit | 6522add29b65f7fe572202b2a1e83a8cd00b07fa (patch) | |
tree | 1372289a2cbe9345b5231abe32c44b42be707a59 /gcc/tree-ssa-ccp.c | |
parent | 6a6951b1bf77ab4d1c0fbffc361ad047e3aa0b98 (diff) |
re PR tree-optimization/78542 (wrong code at -Og results in endless loop)
2016-11-28 Richard Biener <rguenther@suse.de>
PR tree-optimization/78542
* tree-ssa-ccp.c (evaluate_stmt): Only valueize simplification
if allowed.
* gcc.dg/torture/pr78542.c: New testcase.
From-SVN: r242920
Diffstat (limited to 'gcc/tree-ssa-ccp.c')
-rw-r--r-- | gcc/tree-ssa-ccp.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/gcc/tree-ssa-ccp.c b/gcc/tree-ssa-ccp.c index f89da708f42..084b2e1dace 100644 --- a/gcc/tree-ssa-ccp.c +++ b/gcc/tree-ssa-ccp.c @@ -1744,7 +1744,12 @@ evaluate_stmt (gimple *stmt) { fold_defer_overflow_warnings (); simplified = ccp_fold (stmt); - if (simplified && TREE_CODE (simplified) == SSA_NAME) + if (simplified + && TREE_CODE (simplified) == SSA_NAME + /* We may not use values of something that may be simulated again, + see valueize_op_1. */ + && (SSA_NAME_IS_DEFAULT_DEF (simplified) + || ! prop_simulate_again_p (SSA_NAME_DEF_STMT (simplified)))) { ccp_prop_value_t *val = get_value (simplified); if (val && val->lattice_val != VARYING) |