gimple.c (canonicalize_cond_expr_cond): (bool)x is not the same as x != 0.
authorRichard Guenther <rguenther@suse.de>
Thu, 16 Jun 2011 08:41:50 +0000 (08:41 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Thu, 16 Jun 2011 08:41:50 +0000 (08:41 +0000)
2011-06-16  Richard Guenther  <rguenther@suse.de>

* gimple.c (canonicalize_cond_expr_cond): (bool)x is not
the same as x != 0.
* fold-const.c (fold_binary_loc): Do not fold X & 1 != 0 to
(bool) X & 1.
* ipa-prop.c (ipa_analyze_indirect_call_uses): Also allow
equality compares against zero for the lower bit.

From-SVN: r175096

gcc/ChangeLog
gcc/fold-const.c
gcc/gimple.c
gcc/ipa-prop.c

index 7a5a4114c2dcf85936f029992bcc7019dfc24a69..46ef4576385fb5f43de7787039165042dc016bbf 100644 (file)
@@ -1,3 +1,12 @@
+2011-06-16  Richard Guenther  <rguenther@suse.de>
+
+       * gimple.c (canonicalize_cond_expr_cond): (bool)x is not
+       the same as x != 0.
+       * fold-const.c (fold_binary_loc): Do not fold X & 1 != 0 to
+       (bool) X & 1.
+       * ipa-prop.c (ipa_analyze_indirect_call_uses): Also allow
+       equality compares against zero for the lower bit.
+
 2011-06-16  Jakub Jelinek  <jakub@redhat.com>
 
        PR tree-optimization/49419
index e1a497eda9657ac9f7f9eec65f5896e218d5dc2a..c39d33e1da22106c073c1f0a4703fd6e74e1e625 100644 (file)
@@ -12357,14 +12357,6 @@ fold_binary_loc (location_t loc,
            }
        }
 
-      /* If this is an NE comparison of zero with an AND of one, remove the
-        comparison since the AND will give the correct value.  */
-      if (code == NE_EXPR
-         && integer_zerop (arg1)
-         && TREE_CODE (arg0) == BIT_AND_EXPR
-         && integer_onep (TREE_OPERAND (arg0, 1)))
-       return fold_convert_loc (loc, type, arg0);
-
       /* If we have (A & C) == C where C is a power of 2, convert this into
         (A & C) != 0.  Similarly for NE_EXPR.  */
       if (TREE_CODE (arg0) == BIT_AND_EXPR
index 6a9b58d602381433790ba2870e3001d768541581..fd9757908f06d36ac88c277e0137643c570eb60c 100644 (file)
@@ -3139,16 +3139,8 @@ canonicalize_cond_expr_cond (tree t)
       && truth_value_p (TREE_CODE (TREE_OPERAND (t, 0))))
     t = TREE_OPERAND (t, 0);
 
-  /* For (bool)x use x != 0.  */
-  if (CONVERT_EXPR_P (t)
-      && TREE_CODE (TREE_TYPE (t)) == BOOLEAN_TYPE)
-    {
-      tree top0 = TREE_OPERAND (t, 0);
-      t = build2 (NE_EXPR, TREE_TYPE (t),
-                 top0, build_int_cst (TREE_TYPE (top0), 0));
-    }
   /* For !x use x == 0.  */
-  else if (TREE_CODE (t) == TRUTH_NOT_EXPR)
+  if (TREE_CODE (t) == TRUTH_NOT_EXPR)
     {
       tree top0 = TREE_OPERAND (t, 0);
       t = build2 (EQ_EXPR, TREE_TYPE (t),
index f7bb3114ba6fcbe2f0d6be7764d0b2bfd4b1b215..10c11d41ae63c8dc2af1ad50abce011afc3434d6 100644 (file)
@@ -1347,7 +1347,8 @@ ipa_analyze_indirect_call_uses (struct cgraph_node *node,
   if (!branch || gimple_code (branch) != GIMPLE_COND)
     return;
 
-  if (gimple_cond_code (branch) != NE_EXPR
+  if ((gimple_cond_code (branch) != NE_EXPR
+       && gimple_cond_code (branch) != EQ_EXPR)
       || !integer_zerop (gimple_cond_rhs (branch)))
     return;