]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR tree-optimization/39643 (cris-elf gcc.dg/torture/builtin-math-3.c -O1 and...
authorRichard Guenther <rguenther@suse.de>
Mon, 6 Apr 2009 14:16:15 +0000 (14:16 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Mon, 6 Apr 2009 14:16:15 +0000 (14:16 +0000)
2009-04-06  Richard Guenther  <rguenther@suse.de>

PR tree-optimization/39643
* tree-ssa-ccp.c (ccp_fold): Fold REALPART_EXPRs and
IMAGPART_EXPRs of complex constants.
(execute_fold_all_builtins): If we folded a call queue
TODO_update_address_taken.

From-SVN: r145604

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

index 17ebd6d42fefec42f3b7d97923ddb96213b51af3..2411dd1cdebe2b475c08213bbd0b7db97119eae7 100644 (file)
@@ -1,3 +1,11 @@
+2009-04-06  Richard Guenther  <rguenther@suse.de>
+
+       PR tree-optimization/39643
+       * tree-ssa-ccp.c (ccp_fold): Fold REALPART_EXPRs and
+       IMAGPART_EXPRs of complex constants.
+       (execute_fold_all_builtins): If we folded a call queue
+       TODO_update_address_taken.
+
 2009-04-06  Jan Hubicka  <jh@suse.cz>
 
        PR middle-end/39659
index 6d8e88e6d33a42fa2283868c427c5306216c9cae..2f396583b9a220b74e30a0b938f953b6f1229fbb 100644 (file)
@@ -949,12 +949,14 @@ ccp_fold (gimple stmt)
 
               if (kind == tcc_reference)
                {
-                 if (TREE_CODE (rhs) == VIEW_CONVERT_EXPR
+                 if ((TREE_CODE (rhs) == VIEW_CONVERT_EXPR
+                      || TREE_CODE (rhs) == REALPART_EXPR
+                      || TREE_CODE (rhs) == IMAGPART_EXPR)
                      && TREE_CODE (TREE_OPERAND (rhs, 0)) == SSA_NAME)
                    {
                      prop_value_t *val = get_value (TREE_OPERAND (rhs, 0));
                      if (val->lattice_val == CONSTANT)
-                       return fold_unary (VIEW_CONVERT_EXPR,
+                       return fold_unary (TREE_CODE (rhs),
                                           TREE_TYPE (rhs), val->value);
                    }
                  else if (TREE_CODE (rhs) == INDIRECT_REF
@@ -3270,7 +3272,10 @@ execute_fold_all_builtins (void)
          push_stmt_changes (gsi_stmt_ptr (&i));
 
           if (!update_call_from_tree (&i, result))
-           gimplify_and_update_call_from_tree (&i, result);
+           {
+             gimplify_and_update_call_from_tree (&i, result);
+             todoflags |= TODO_update_address_taken;
+           }
 
          stmt = gsi_stmt (i);
          pop_stmt_changes (gsi_stmt_ptr (&i));