diff options
author | Andrew Pinski <pinskia@physics.uc.edu> | 2005-11-25 05:05:26 +0000 |
---|---|---|
committer | Andrew Pinski <pinskia@gcc.gnu.org> | 2005-11-24 21:05:26 -0800 |
commit | 7934558dd1bb546c99903507337c94ba37dc68f3 (patch) | |
tree | a26d28237f7aa6f8e33d146afbd456082c1dbc81 /gcc/fold-const.c | |
parent | 210dfe6eccfaba41bf3860963b023a30c276dcbc (diff) | |
download | gcc-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.c | 10 |
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) |