]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR tree-optimization/20963 (ICE tree check: expected value_handle, have addr_expr...
authorDaniel Berlin <dberlin@dberlin.org>
Thu, 14 Apr 2005 15:24:53 +0000 (15:24 +0000)
committerDaniel Berlin <dberlin@gcc.gnu.org>
Thu, 14 Apr 2005 15:24:53 +0000 (15:24 +0000)
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

gcc/ChangeLog
gcc/tree-ssa-pre.c

index 476c7cd068a38154fdadb828bd3d75326e2eee4e..054ece3d8ef01be7e9dce5810cb6109ad5ab0abf 100644 (file)
@@ -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
index 34b759cb8808a743cc60a07ae1d4762d53d5ca21..409ce83504452f098de06f7cb33e0cb8d100954e 100644 (file)
@@ -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))
                {