tree-ssa-forwprop.c (lookup_logical_inverted_value): Remove TRUTH_*_EXPR handling.
2011-07-19 Richard Guenther <rguenther@suse.de> * tree-ssa-forwprop.c (lookup_logical_inverted_value): Remove TRUTH_*_EXPR handling. * tree-ssa-operands.c (get_expr_operands): Likewise. * tree-ssa-pre.c (fully_constant_expression): Likewise. * tree-ssa-uninit.c (use_pred_not_overlap_with_undef_path_pre): Likewise. (is_and_or_or): Likewise. (is_norm_cond_subset_of): Likewise. From-SVN: r176463
This commit is contained in:
parent
5d49b6a7b2
commit
3046b1a95c
|
@ -1,3 +1,14 @@
|
||||||
|
2011-07-19 Richard Guenther <rguenther@suse.de>
|
||||||
|
|
||||||
|
* tree-ssa-forwprop.c (lookup_logical_inverted_value): Remove
|
||||||
|
TRUTH_*_EXPR handling.
|
||||||
|
* tree-ssa-operands.c (get_expr_operands): Likewise.
|
||||||
|
* tree-ssa-pre.c (fully_constant_expression): Likewise.
|
||||||
|
* tree-ssa-uninit.c (use_pred_not_overlap_with_undef_path_pre):
|
||||||
|
Likewise.
|
||||||
|
(is_and_or_or): Likewise.
|
||||||
|
(is_norm_cond_subset_of): Likewise.
|
||||||
|
|
||||||
2011-07-19 Richard Guenther <rguenther@suse.de>
|
2011-07-19 Richard Guenther <rguenther@suse.de>
|
||||||
|
|
||||||
* tree.h (fold_build_pointer_plus_loc): New helper function.
|
* tree.h (fold_build_pointer_plus_loc): New helper function.
|
||||||
|
|
|
@ -1622,16 +1622,13 @@ lookup_logical_inverted_value (tree name)
|
||||||
op2 = NULL_TREE;
|
op2 = NULL_TREE;
|
||||||
|
|
||||||
/* Get for EQ_EXPR or BIT_XOR_EXPR operation the second operand.
|
/* Get for EQ_EXPR or BIT_XOR_EXPR operation the second operand.
|
||||||
If CODE isn't an EQ_EXPR, BIT_XOR_EXPR, TRUTH_NOT_EXPR,
|
If CODE isn't an EQ_EXPR, BIT_XOR_EXPR, or BIT_NOT_EXPR, then return. */
|
||||||
or BIT_NOT_EXPR, then return. */
|
|
||||||
if (code == EQ_EXPR || code == NE_EXPR
|
if (code == EQ_EXPR || code == NE_EXPR
|
||||||
|| code == BIT_XOR_EXPR)
|
|| code == BIT_XOR_EXPR)
|
||||||
op2 = gimple_assign_rhs2 (def);
|
op2 = gimple_assign_rhs2 (def);
|
||||||
|
|
||||||
switch (code)
|
switch (code)
|
||||||
{
|
{
|
||||||
case TRUTH_NOT_EXPR:
|
|
||||||
return op1;
|
|
||||||
case BIT_NOT_EXPR:
|
case BIT_NOT_EXPR:
|
||||||
if (truth_valued_ssa_name (name))
|
if (truth_valued_ssa_name (name))
|
||||||
return op1;
|
return op1;
|
||||||
|
|
|
@ -968,15 +968,11 @@ get_expr_operands (gimple stmt, tree *expr_p, int flags)
|
||||||
gimple_set_has_volatile_ops (stmt, true);
|
gimple_set_has_volatile_ops (stmt, true);
|
||||||
/* FALLTHRU */
|
/* FALLTHRU */
|
||||||
|
|
||||||
case TRUTH_NOT_EXPR:
|
|
||||||
case VIEW_CONVERT_EXPR:
|
case VIEW_CONVERT_EXPR:
|
||||||
do_unary:
|
do_unary:
|
||||||
get_expr_operands (stmt, &TREE_OPERAND (expr, 0), flags);
|
get_expr_operands (stmt, &TREE_OPERAND (expr, 0), flags);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case TRUTH_AND_EXPR:
|
|
||||||
case TRUTH_OR_EXPR:
|
|
||||||
case TRUTH_XOR_EXPR:
|
|
||||||
case COMPOUND_EXPR:
|
case COMPOUND_EXPR:
|
||||||
case OBJ_TYPE_REF:
|
case OBJ_TYPE_REF:
|
||||||
case ASSERT_EXPR:
|
case ASSERT_EXPR:
|
||||||
|
|
|
@ -1150,14 +1150,6 @@ fully_constant_expression (pre_expr e)
|
||||||
vn_nary_op_t nary = PRE_EXPR_NARY (e);
|
vn_nary_op_t nary = PRE_EXPR_NARY (e);
|
||||||
switch (TREE_CODE_CLASS (nary->opcode))
|
switch (TREE_CODE_CLASS (nary->opcode))
|
||||||
{
|
{
|
||||||
case tcc_expression:
|
|
||||||
if (nary->opcode == TRUTH_NOT_EXPR)
|
|
||||||
goto do_unary;
|
|
||||||
if (nary->opcode != TRUTH_AND_EXPR
|
|
||||||
&& nary->opcode != TRUTH_OR_EXPR
|
|
||||||
&& nary->opcode != TRUTH_XOR_EXPR)
|
|
||||||
return e;
|
|
||||||
/* Fallthrough. */
|
|
||||||
case tcc_binary:
|
case tcc_binary:
|
||||||
case tcc_comparison:
|
case tcc_comparison:
|
||||||
{
|
{
|
||||||
|
@ -1199,7 +1191,6 @@ fully_constant_expression (pre_expr e)
|
||||||
return e;
|
return e;
|
||||||
/* Fallthrough. */
|
/* Fallthrough. */
|
||||||
case tcc_unary:
|
case tcc_unary:
|
||||||
do_unary:
|
|
||||||
{
|
{
|
||||||
/* We have to go from trees to pre exprs to value ids to
|
/* We have to go from trees to pre exprs to value ids to
|
||||||
constants. */
|
constants. */
|
||||||
|
|
|
@ -1088,9 +1088,7 @@ use_pred_not_overlap_with_undef_path_pred (
|
||||||
static inline bool
|
static inline bool
|
||||||
is_and_or_or (enum tree_code tc, tree typ)
|
is_and_or_or (enum tree_code tc, tree typ)
|
||||||
{
|
{
|
||||||
return (tc == TRUTH_AND_EXPR
|
return (tc == BIT_IOR_EXPR
|
||||||
|| tc == TRUTH_OR_EXPR
|
|
||||||
|| tc == BIT_IOR_EXPR
|
|
||||||
|| (tc == BIT_AND_EXPR
|
|| (tc == BIT_AND_EXPR
|
||||||
&& (typ == 0 || TREE_CODE (typ) == BOOLEAN_TYPE)));
|
&& (typ == 0 || TREE_CODE (typ) == BOOLEAN_TYPE)));
|
||||||
}
|
}
|
||||||
|
@ -1415,15 +1413,15 @@ is_norm_cond_subset_of (norm_cond_t norm_cond1,
|
||||||
code1 = norm_cond1->cond_code;
|
code1 = norm_cond1->cond_code;
|
||||||
code2 = norm_cond2->cond_code;
|
code2 = norm_cond2->cond_code;
|
||||||
|
|
||||||
if (code1 == TRUTH_AND_EXPR || code1 == BIT_AND_EXPR)
|
if (code1 == BIT_AND_EXPR)
|
||||||
{
|
{
|
||||||
/* Both conditions are AND expressions. */
|
/* Both conditions are AND expressions. */
|
||||||
if (code2 == TRUTH_AND_EXPR || code2 == BIT_AND_EXPR)
|
if (code2 == BIT_AND_EXPR)
|
||||||
return is_and_set_subset_of (norm_cond1, norm_cond2);
|
return is_and_set_subset_of (norm_cond1, norm_cond2);
|
||||||
/* NORM_COND1 is an AND expression, and NORM_COND2 is an OR
|
/* NORM_COND1 is an AND expression, and NORM_COND2 is an OR
|
||||||
expression. In this case, returns true if any subexpression
|
expression. In this case, returns true if any subexpression
|
||||||
of NORM_COND1 is a subset of any subexpression of NORM_COND2. */
|
of NORM_COND1 is a subset of any subexpression of NORM_COND2. */
|
||||||
else if (code2 == TRUTH_OR_EXPR || code2 == BIT_IOR_EXPR)
|
else if (code2 == BIT_IOR_EXPR)
|
||||||
{
|
{
|
||||||
size_t len1;
|
size_t len1;
|
||||||
len1 = VEC_length (gimple, norm_cond1->conds);
|
len1 = VEC_length (gimple, norm_cond1->conds);
|
||||||
|
@ -1444,7 +1442,7 @@ is_norm_cond_subset_of (norm_cond_t norm_cond1,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* NORM_COND1 is an OR expression */
|
/* NORM_COND1 is an OR expression */
|
||||||
else if (code1 == TRUTH_OR_EXPR || code1 == BIT_IOR_EXPR)
|
else if (code1 == BIT_IOR_EXPR)
|
||||||
{
|
{
|
||||||
if (code2 != code1)
|
if (code2 != code1)
|
||||||
return false;
|
return false;
|
||||||
|
@ -1457,10 +1455,10 @@ is_norm_cond_subset_of (norm_cond_t norm_cond1,
|
||||||
gcc_assert (VEC_length (gimple, norm_cond1->conds) == 1);
|
gcc_assert (VEC_length (gimple, norm_cond1->conds) == 1);
|
||||||
/* Conservatively returns false if NORM_COND1 is non-decomposible
|
/* Conservatively returns false if NORM_COND1 is non-decomposible
|
||||||
and NORM_COND2 is an AND expression. */
|
and NORM_COND2 is an AND expression. */
|
||||||
if (code2 == TRUTH_AND_EXPR || code2 == BIT_AND_EXPR)
|
if (code2 == BIT_AND_EXPR)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (code2 == TRUTH_OR_EXPR || code2 == BIT_IOR_EXPR)
|
if (code2 == BIT_IOR_EXPR)
|
||||||
return is_subset_of_any (VEC_index (gimple, norm_cond1->conds, 0),
|
return is_subset_of_any (VEC_index (gimple, norm_cond1->conds, 0),
|
||||||
norm_cond1->invert, norm_cond2, false);
|
norm_cond1->invert, norm_cond2, false);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue