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:
parent
e641e49532
commit
1243089639
|
@ -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>
|
2011-06-16 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
PR tree-optimization/49419
|
PR tree-optimization/49419
|
||||||
|
|
|
@ -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
|
/* If we have (A & C) == C where C is a power of 2, convert this into
|
||||||
(A & C) != 0. Similarly for NE_EXPR. */
|
(A & C) != 0. Similarly for NE_EXPR. */
|
||||||
if (TREE_CODE (arg0) == BIT_AND_EXPR
|
if (TREE_CODE (arg0) == BIT_AND_EXPR
|
||||||
|
|
10
gcc/gimple.c
10
gcc/gimple.c
|
@ -3139,16 +3139,8 @@ canonicalize_cond_expr_cond (tree t)
|
||||||
&& truth_value_p (TREE_CODE (TREE_OPERAND (t, 0))))
|
&& truth_value_p (TREE_CODE (TREE_OPERAND (t, 0))))
|
||||||
t = 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. */
|
/* 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);
|
tree top0 = TREE_OPERAND (t, 0);
|
||||||
t = build2 (EQ_EXPR, TREE_TYPE (t),
|
t = build2 (EQ_EXPR, TREE_TYPE (t),
|
||||||
|
|
|
@ -1347,7 +1347,8 @@ ipa_analyze_indirect_call_uses (struct cgraph_node *node,
|
||||||
if (!branch || gimple_code (branch) != GIMPLE_COND)
|
if (!branch || gimple_code (branch) != GIMPLE_COND)
|
||||||
return;
|
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)))
|
|| !integer_zerop (gimple_cond_rhs (branch)))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue