On Wed, Jul 27, 2011 at 1:49 PM, Kai Tietz <kti...@redhat.com> wrote: > Hello, > > this patch removes from gimple-fold the dead-code about > TRUTH_AND/TRUTH_OR-expression checks. > > ChangeLog > > * gimple-fold.c (or_comparisons_1): Remove TRUTH_AND/OR > expression handling. > (and_var_with_comparison_1): Likewise. > > Bootstrapped and regression tested on host x86_64-pc-linux-gnu. Ok for apply?
Ok. Thanks, Richard. > Regards, > Kai > > Index: gcc-head/gcc/gimple-fold.c > =================================================================== > --- gcc-head.orig/gcc/gimple-fold.c > +++ gcc-head/gcc/gimple-fold.c > @@ -1937,17 +1937,15 @@ and_var_with_comparison_1 (gimple stmt, > > /* If the definition is an AND or OR expression, we may be able to > simplify by reassociating. */ > - if (innercode == TRUTH_AND_EXPR > - || innercode == TRUTH_OR_EXPR > - || (TREE_CODE (TREE_TYPE (var)) == BOOLEAN_TYPE > - && (innercode == BIT_AND_EXPR || innercode == BIT_IOR_EXPR))) > + if (TREE_CODE (TREE_TYPE (var)) == BOOLEAN_TYPE > + && (innercode == BIT_AND_EXPR || innercode == BIT_IOR_EXPR)) > { > tree inner1 = gimple_assign_rhs1 (stmt); > tree inner2 = gimple_assign_rhs2 (stmt); > gimple s; > tree t; > tree partial = NULL_TREE; > - bool is_and = (innercode == TRUTH_AND_EXPR || innercode == > BIT_AND_EXPR); > + bool is_and = (innercode == BIT_AND_EXPR); > > /* Check for boolean identities that don't require recursive examination > of inner1/inner2: > @@ -2069,6 +2067,7 @@ and_comparisons_1 (enum tree_code code1, > if (operand_equal_p (op1a, op2a, 0) > && operand_equal_p (op1b, op2b, 0)) > { > + /* Result will be either NULL_TREE, or a combined comparison. */ > tree t = combine_comparisons (UNKNOWN_LOCATION, > TRUTH_ANDIF_EXPR, code1, code2, > boolean_type_node, op1a, op1b); > @@ -2080,6 +2079,7 @@ and_comparisons_1 (enum tree_code code1, > if (operand_equal_p (op1a, op2b, 0) > && operand_equal_p (op1b, op2a, 0)) > { > + /* Result will be either NULL_TREE, or a combined comparison. */ > tree t = combine_comparisons (UNKNOWN_LOCATION, > TRUTH_ANDIF_EXPR, code1, > swap_tree_comparison (code2), > @@ -2398,17 +2398,15 @@ or_var_with_comparison_1 (gimple stmt, > > /* If the definition is an AND or OR expression, we may be able to > simplify by reassociating. */ > - if (innercode == TRUTH_AND_EXPR > - || innercode == TRUTH_OR_EXPR > - || (TREE_CODE (TREE_TYPE (var)) == BOOLEAN_TYPE > - && (innercode == BIT_AND_EXPR || innercode == BIT_IOR_EXPR))) > + if (TREE_CODE (TREE_TYPE (var)) == BOOLEAN_TYPE > + && (innercode == BIT_AND_EXPR || innercode == BIT_IOR_EXPR)) > { > tree inner1 = gimple_assign_rhs1 (stmt); > tree inner2 = gimple_assign_rhs2 (stmt); > gimple s; > tree t; > tree partial = NULL_TREE; > - bool is_or = (innercode == TRUTH_OR_EXPR || innercode == BIT_IOR_EXPR); > + bool is_or = (innercode == BIT_IOR_EXPR); > > /* Check for boolean identities that don't require recursive examination > of inner1/inner2: > @@ -2531,6 +2529,7 @@ or_comparisons_1 (enum tree_code code1, > if (operand_equal_p (op1a, op2a, 0) > && operand_equal_p (op1b, op2b, 0)) > { > + /* Result will be either NULL_TREE, or a combined comparison. */ > tree t = combine_comparisons (UNKNOWN_LOCATION, > TRUTH_ORIF_EXPR, code1, code2, > boolean_type_node, op1a, op1b); > @@ -2542,6 +2541,7 @@ or_comparisons_1 (enum tree_code code1, > if (operand_equal_p (op1a, op2b, 0) > && operand_equal_p (op1b, op2a, 0)) > { > + /* Result will be either NULL_TREE, or a combined comparison. */ > tree t = combine_comparisons (UNKNOWN_LOCATION, > TRUTH_ORIF_EXPR, code1, > swap_tree_comparison (code2), >