[multiple changes]
authorAndrew Pinski <pinskia@physics.uc.edu>
Fri, 25 Nov 2005 05:05:26 +0000 (05:05 +0000)
committerAndrew Pinski <pinskia@gcc.gnu.org>
Fri, 25 Nov 2005 05:05:26 +0000 (21:05 -0800)
2005-11-25  Andrew Pinski  <pinskia@physics.uc.edu>

        PR middle-end/24989
        * fold-const.c (fold_build): Convert bool_var != 1 and
        bool_var == 0 to !bool_var.

2005-11-24  Andrew Pinski  <pinskia@physics.uc.edu>

        PR middle-end/24989
        * gcc.dg/tree-ssa/bool-10.c: New test.
        * gcc.dg/tree-ssa/bool-11.c: New test.
        * gcc.dg/tree-ssa/bool-7.c: Un-xfail.

From-SVN: r107488

gcc/ChangeLog
gcc/fold-const.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/tree-ssa/bool-10.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/tree-ssa/bool-11.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/tree-ssa/bool-7.c

index aeb45fdd654c86b09ae2e3f9ced3bcb5d7f6533b..bb928cfec4a7e25bf98547d503799fe5b6867654 100644 (file)
@@ -1,3 +1,9 @@
+2005-11-25  Andrew Pinski  <pinskia@physics.uc.edu>
+
+       PR middle-end/24989
+       * fold-const.c (fold_build): Convert bool_var != 1 and
+       bool_var == 0 to !bool_var.
+
 2005-11-25  Andrew Pinski  <pinskia@physics.uc.edu>
 
        PR middle-end/24990
index 962ebd3c39525be89f0c71f6ee667578b922dc69..9a6ac70a39c80cba012221daa364865519aa01d6 100644 (file)
@@ -8857,6 +8857,16 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1)
           && code == EQ_EXPR)
         return non_lvalue (fold_convert (type, arg0));
 
+      /* bool_var != 1 becomes !bool_var. */
+      if (TREE_CODE (TREE_TYPE (arg0)) == BOOLEAN_TYPE && integer_onep (arg1)
+          && code == NE_EXPR)
+        return fold_build1 (TRUTH_NOT_EXPR, type, arg0);
+
+      /* bool_var == 0 becomes !bool_var. */
+      if (TREE_CODE (TREE_TYPE (arg0)) == BOOLEAN_TYPE && integer_zerop (arg1)
+          && code == EQ_EXPR)
+        return fold_build1 (TRUTH_NOT_EXPR, type, arg0);
+
       /* If this is an equality comparison of the address of a non-weak
         object against zero, then we know the result.  */
       if ((code == EQ_EXPR || code == NE_EXPR)
index cb611dc1edcc4d5cc82d3749e5a569465f3e3680..226dc074f8dab17768080c2a2ee39afcee67293f 100644 (file)
@@ -1,3 +1,10 @@
+2005-11-24  Andrew Pinski  <pinskia@physics.uc.edu>
+
+       PR middle-end/24989
+       * gcc.dg/tree-ssa/bool-10.c: New test.
+       * gcc.dg/tree-ssa/bool-11.c: New test.
+       * gcc.dg/tree-ssa/bool-7.c: Un-xfail.
+
 2005-11-24  Andrew Pinski  <pinskia@physics.uc.edu>
 
        PR middle-end/24990
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/bool-10.c b/gcc/testsuite/gcc.dg/tree-ssa/bool-10.c
new file mode 100644 (file)
index 0000000..d7bf20d
--- /dev/null
@@ -0,0 +1,14 @@
+/* { dg-do compile } */
+/* { dg-options "-O1 -fdump-tree-optimized" } */
+
+int f(_Bool x)
+{
+  return (x != 1);
+}
+
+/* There should be no != 1 which is produced by the front-end as
+   bool_var != 1 is the same as !bool_var. */
+/* { dg-final { scan-tree-dump-times "!= 1" 0 "optimized"} } */
+/* { dg-final { scan-tree-dump-times "!x" 1 "optimized"} } */
+
+/* { dg-final { cleanup-tree-dump "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/bool-11.c b/gcc/testsuite/gcc.dg/tree-ssa/bool-11.c
new file mode 100644 (file)
index 0000000..8d88b7e
--- /dev/null
@@ -0,0 +1,14 @@
+/* { dg-do compile } */
+/* { dg-options "-O1 -fdump-tree-optimized" } */
+
+int f(_Bool x)
+{
+  return (x == 0);
+}
+
+/* There should be no == 0 which is produced by the front-end as
+   bool_var == 0 is the same as !bool_var. */
+/* { dg-final { scan-tree-dump-times "== 0" 0 "optimized"} } */
+/* { dg-final { scan-tree-dump-times "!x" 1 "optimized"} } */
+
+/* { dg-final { cleanup-tree-dump "optimized" } } */
index b09b97202c5d3530cf8b0a279e30cffc9e02a861..b798710644ad88d978a20d3de1ff6039f9ad4812 100644 (file)
@@ -11,8 +11,7 @@ int f(_Bool x)
   return y;
 }
 
-/* There should be no != 1. Though PHI-OPT or invert_truth does not
-   fold its tree.  */
-/* { dg-final { scan-tree-dump-times "!= 1" 0 "optimized" { xfail *-*-* } }  }*/
+/* There should be no != 1. Fold changes x != 1 to ! x.  */
+/* { dg-final { scan-tree-dump-times "!= 1" 0 "optimized" } } */
 
 /* { dg-final { cleanup-tree-dump "optimized" } } */