aboutsummaryrefslogtreecommitdiff
path: root/gcc/fold-const.c
diff options
context:
space:
mode:
authorAndrew Pinski <pinskia@physics.uc.edu>2005-11-25 05:05:26 +0000
committerAndrew Pinski <pinskia@gcc.gnu.org>2005-11-24 21:05:26 -0800
commit7934558dd1bb546c99903507337c94ba37dc68f3 (patch)
treea26d28237f7aa6f8e33d146afbd456082c1dbc81 /gcc/fold-const.c
parent210dfe6eccfaba41bf3860963b023a30c276dcbc (diff)
downloadgcc-7934558dd1bb546c99903507337c94ba37dc68f3.zip
gcc-7934558dd1bb546c99903507337c94ba37dc68f3.tar.gz
gcc-7934558dd1bb546c99903507337c94ba37dc68f3.tar.bz2
[multiple changes]
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
Diffstat (limited to 'gcc/fold-const.c')
-rw-r--r--gcc/fold-const.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index 962ebd3..9a6ac70 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -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)