aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/fold-const.c8
-rw-r--r--gcc/gimple.c10
-rw-r--r--gcc/ipa-prop.c3
4 files changed, 12 insertions, 18 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 7a5a411..46ef457 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index e1a497e..c39d33e 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -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
diff --git a/gcc/gimple.c b/gcc/gimple.c
index 6a9b58d6..fd97579 100644
--- a/gcc/gimple.c
+++ b/gcc/gimple.c
@@ -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),
diff --git a/gcc/ipa-prop.c b/gcc/ipa-prop.c
index f7bb311..10c11d4 100644
--- a/gcc/ipa-prop.c
+++ b/gcc/ipa-prop.c
@@ -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;