diff options
author | Daniel Berlin <dberlin@dberlin.org> | 2005-04-14 15:24:53 +0000 |
---|---|---|
committer | Daniel Berlin <dberlin@gcc.gnu.org> | 2005-04-14 15:24:53 +0000 |
commit | 75a7d5d0f92cc19af4f4eb510d3d9a3a7d22f77b (patch) | |
tree | 0a3f8402618ba8b92aebacc11c89ddf884965ea4 | |
parent | f16bb520c9747f8bc5aac6f1f39d784a882f08cb (diff) | |
download | gcc-75a7d5d0f92cc19af4f4eb510d3d9a3a7d22f77b.zip gcc-75a7d5d0f92cc19af4f4eb510d3d9a3a7d22f77b.tar.gz gcc-75a7d5d0f92cc19af4f4eb510d3d9a3a7d22f77b.tar.bz2 |
re PR tree-optimization/20963 (ICE tree check: expected value_handle, have addr_expr in value_exists_in_set_bitmap, at tree-ssa-pre.c:437)
2005-04-14 Daniel Berlin <dberlin@dberlin.org>
Fix PR tree-optimization/20963
* tree-ssa-pre.c (compute_avail): Remove special case for
TREE_INVARIANT.
(create_expression_by_pieces): Add value numbers for forced out
statements.
From-SVN: r98136
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/tree-ssa-pre.c | 24 |
2 files changed, 31 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 476c7cd..054ece3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2005-04-14 Daniel Berlin <dberlin@dberlin.org> + + Fix PR tree-optimization/20963 + * tree-ssa-pre.c (compute_avail): Remove special case for + TREE_INVARIANT. + (create_expression_by_pieces): Add value numbers for forced out + statements. + 2005-04-14 Hans-Peter Nilsson <hp@axis.com> * config/cris/cris.md: Replace references to (reg:SI 16) with diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index 34b759c..409ce83 100644 --- a/gcc/tree-ssa-pre.c +++ b/gcc/tree-ssa-pre.c @@ -1341,6 +1341,18 @@ create_expression_by_pieces (basic_block block, tree expr, tree stmts) newexpr = force_gimple_operand (folded, &forced_stmts, false, NULL); if (forced_stmts) { + tsi = tsi_start (forced_stmts); + for (; !tsi_end_p (tsi); tsi_next (&tsi)) + { + tree stmt = tsi_stmt (tsi); + tree forcedname = TREE_OPERAND (stmt, 0); + tree forcedexpr = TREE_OPERAND (stmt, 1); + tree val = vn_lookup_or_add (forcedexpr, NULL); + vn_add (forcedname, val, NULL); + bitmap_value_replace_in_set (NEW_SETS (block), forcedname); + bitmap_value_replace_in_set (AVAIL_OUT (block), forcedname); + } + tsi = tsi_last (stmts); tsi_link_after (&tsi, forced_stmts, TSI_CONTINUE_LINKING); } @@ -1371,6 +1383,17 @@ create_expression_by_pieces (basic_block block, tree expr, tree stmts) newexpr = force_gimple_operand (folded, &forced_stmts, false, NULL); if (forced_stmts) { + tsi = tsi_start (forced_stmts); + for (; !tsi_end_p (tsi); tsi_next (&tsi)) + { + tree stmt = tsi_stmt (tsi); + tree forcedname = TREE_OPERAND (stmt, 0); + tree forcedexpr = TREE_OPERAND (stmt, 1); + tree val = vn_lookup_or_add (forcedexpr, NULL); + vn_add (forcedname, val, NULL); + bitmap_value_replace_in_set (NEW_SETS (block), forcedname); + bitmap_value_replace_in_set (AVAIL_OUT (block), forcedname); + } tsi = tsi_last (stmts); tsi_link_after (&tsi, forced_stmts, TSI_CONTINUE_LINKING); } @@ -1960,7 +1983,6 @@ compute_avail (void) } else if (TREE_CODE (rhs) == SSA_NAME || is_gimple_min_invariant (rhs) - || TREE_INVARIANT (rhs) || TREE_CODE (rhs) == ADDR_EXPR || DECL_P (rhs)) { |