diff options
author | Richard Guenther <rguenther@suse.de> | 2010-01-29 12:19:36 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2010-01-29 12:19:36 +0000 |
commit | eb6b98c71cbb85510d9b85c2b7439176b730a9b7 (patch) | |
tree | e90381126a2950ed6ced8289ff2b6053134aed29 /gcc | |
parent | c23cd1d60fad597684f39e56134ff918a9bab466 (diff) | |
download | gcc-eb6b98c71cbb85510d9b85c2b7439176b730a9b7.zip gcc-eb6b98c71cbb85510d9b85c2b7439176b730a9b7.tar.gz gcc-eb6b98c71cbb85510d9b85c2b7439176b730a9b7.tar.bz2 |
tree-ssa-ccp.c (ccp_fold_stmt): Unshare values we substitute.
2010-01-29 Richard Guenther <rguenther@suse.de>
* tree-ssa-ccp.c (ccp_fold_stmt): Unshare values we substitute.
Assert we successfully updated the call.
From-SVN: r156346
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/tree-ssa-ccp.c | 8 |
2 files changed, 10 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5856b0c..b3483cb 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2010-01-29 Richard Guenther <rguenther@suse.de> + + * tree-ssa-ccp.c (ccp_fold_stmt): Unshare values we substitute. + Assert we successfully updated the call. + 2010-01-29 Jakub Jelinek <jakub@redhat.com> PR rtl-optimization/42889 diff --git a/gcc/tree-ssa-ccp.c b/gcc/tree-ssa-ccp.c index f6380eb..2383611 100644 --- a/gcc/tree-ssa-ccp.c +++ b/gcc/tree-ssa-ccp.c @@ -1518,11 +1518,13 @@ ccp_fold_stmt (gimple_stmt_iterator *gsi) && (val = get_value (lhs)) && val->lattice_val == CONSTANT) { - tree new_rhs = val->value; + tree new_rhs = unshare_expr (val->value); + bool res; if (!useless_type_conversion_p (TREE_TYPE (lhs), TREE_TYPE (new_rhs))) new_rhs = fold_convert (TREE_TYPE (lhs), new_rhs); - update_call_from_tree (gsi, new_rhs); + res = update_call_from_tree (gsi, new_rhs); + gcc_assert (res); return true; } @@ -1542,7 +1544,7 @@ ccp_fold_stmt (gimple_stmt_iterator *gsi) (TYPE_MAIN_VARIANT (TREE_VALUE (argt)), TYPE_MAIN_VARIANT (TREE_TYPE (val->value)))) { - gimple_call_set_arg (stmt, i, val->value); + gimple_call_set_arg (stmt, i, unshare_expr (val->value)); changed = true; } } |