re PR tree-optimization/21658 (CCP does not propagate ADDR_EXPR far enough.)
authorKazu Hirata <kazu@cs.umass.edu>
Fri, 27 May 2005 16:31:29 +0000 (16:31 +0000)
committerKazu Hirata <kazu@gcc.gnu.org>
Fri, 27 May 2005 16:31:29 +0000 (16:31 +0000)
gcc/
PR tree-optimization/21658
* tree-ssa-ccp.c (ccp_fold): Call fold_binary instead of
fold_binary_to_constant.  Likewise, call fold_unary instead of
fold_unary_to_constant.

testsuite/
PR tree-optimization/21658
* gcc.dg/tree-ssa/pr21658.c: New.

From-SVN: r100266

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/tree-ssa/pr21658.c [new file with mode: 0644]
gcc/tree-ssa-ccp.c

index 77d2700174ab01fe78b03b697d9798f21448fc35..557ed56c0e43301b23c355f3776fc72b6417a1c9 100644 (file)
@@ -1,3 +1,10 @@
+2005-05-27  Kazu Hirata  <kazu@cs.umass.edu>
+
+       PR tree-optimization/21658
+       * tree-ssa-ccp.c (ccp_fold): Call fold_binary instead of
+       fold_binary_to_constant.  Likewise, call fold_unary instead of
+       fold_unary_to_constant.
+
 2005-05-27  Nathan Sidwell  <nathan@codesourcery.com>
 
        * vec.h: Implement integral type vector specialization.
index 1a6bdc7ddf6a86c90acfcdf75e93629563820e25..efeae615a679e138d935c101bb3ae9301ddf0fdb 100644 (file)
@@ -1,3 +1,8 @@
+2005-05-27  Kazu Hirata  <kazu@cs.umass.edu>
+
+       PR tree-optimization/21658
+       * gcc.dg/tree-ssa/pr21658.c: New.
+
 2005-05-27  Nathan Sidwell  <nathan@codesourcery.com>
 
        PR c++/21455
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr21658.c b/gcc/testsuite/gcc.dg/tree-ssa/pr21658.c
new file mode 100644 (file)
index 0000000..993b493
--- /dev/null
@@ -0,0 +1,21 @@
+/* PR tree-optimization/21658
+   CCP did not propagate an ADDR_EXPR far enough, preventing the "if"
+   statement below from being folded.  */
+
+/* { dg-do compile } */
+/* { dg-options "-O2 -fno-tree-dominator-opts -fdump-tree-ccp-details" } */
+
+void link_error (void);
+
+void
+f (void)
+{
+  int a[10];
+  int *p = &a[5];
+  int *q = p - 1;
+  if (q != &a[4])
+    link_error ();
+}
+
+/* { dg-final { scan-tree-dump-times "with if \\(0\\)" 1 "ccp"} } */
+/* { dg-final { cleanup-tree-dump "ccp" } } */
index 45472f402ab55f28d4614e34808136ff58681f2e..c1593f884c3726f14cfa4f7d57da80f9f4142166 100644 (file)
@@ -849,7 +849,7 @@ ccp_fold (tree stmt)
            op0 = get_value (op0, true)->value;
        }
 
-      retval = fold_unary_to_constant (code, TREE_TYPE (rhs), op0);
+      retval = fold_unary (code, TREE_TYPE (rhs), op0);
 
       /* If we folded, but did not create an invariant, then we can not
         use this expression.  */
@@ -900,7 +900,7 @@ ccp_fold (tree stmt)
            op1 = val->value;
        }
 
-      retval = fold_binary_to_constant (code, TREE_TYPE (rhs), op0, op1);
+      retval = fold_binary (code, TREE_TYPE (rhs), op0, op1);
 
       /* If we folded, but did not create an invariant, then we can not
         use this expression.  */