From fbf3fee2b959926c4df4295eba74ea144f0c6a00 Mon Sep 17 00:00:00 2001 From: Richard Guenther Date: Thu, 14 Jul 2011 12:42:17 +0000 Subject: [PATCH] fold-const.c (fold_binary_loc): Convert the !bool_var result... 2011-07-14 Richard Guenther * fold-const.c (fold_binary_loc): Convert the !bool_var result, not bool_var when folding bool_var != 1 or bool_var == 0. From-SVN: r176272 --- gcc/ChangeLog | 5 +++++ gcc/fold-const.c | 10 ++++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2341964fe70..61b45357296 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2011-07-14 Richard Guenther + + * fold-const.c (fold_binary_loc): Convert the !bool_var result, + not bool_var when folding bool_var != 1 or bool_var == 0. + 2011-07-14 Bernd Schmidt * haifa-sched.c (schedule_insns): Remove outdated comment. diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 9640264954a..94c8926b03d 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -12156,14 +12156,16 @@ fold_binary_loc (location_t loc, /* bool_var != 1 becomes !bool_var. */ if (TREE_CODE (TREE_TYPE (arg0)) == BOOLEAN_TYPE && integer_onep (arg1) && code == NE_EXPR) - return fold_build1_loc (loc, TRUTH_NOT_EXPR, type, - fold_convert_loc (loc, type, arg0)); + return fold_convert_loc (loc, type, + fold_build1_loc (loc, TRUTH_NOT_EXPR, + TREE_TYPE (arg0), arg0)); /* bool_var == 0 becomes !bool_var. */ if (TREE_CODE (TREE_TYPE (arg0)) == BOOLEAN_TYPE && integer_zerop (arg1) && code == EQ_EXPR) - return fold_build1_loc (loc, TRUTH_NOT_EXPR, type, - fold_convert_loc (loc, type, arg0)); + return fold_convert_loc (loc, type, + fold_build1_loc (loc, TRUTH_NOT_EXPR, + TREE_TYPE (arg0), arg0)); /* !exp != 0 becomes !exp */ if (TREE_CODE (arg0) == TRUTH_NOT_EXPR && integer_zerop (arg1) -- 2.30.2