gimple.c (canonicalize_cond_expr_cond): (bool)x is not the same as x != 0.

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
This commit is contained in:
Richard Guenther 2011-06-16 08:41:50 +00:00 committed by Richard Biener
parent e641e49532
commit 1243089639
4 changed files with 12 additions and 18 deletions

View 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

View 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

View 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),

View 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;