gimple-fold.c (gimple_fold_stmt_to_constant_1): Remove dispatching to fold_binary for GIMPLE_BINARY_RHS and for comparisons...

2015-08-04  Richard Biener  <rguenther@suse.de>

	* gimple-fold.c (gimple_fold_stmt_to_constant_1): Remove
	dispatching to fold_binary for GIMPLE_BINARY_RHS and for
	comparisons embedded in [VEC_]COND_EXPRs.

From-SVN: r226551
This commit is contained in:
Richard Biener 2015-08-04 09:40:54 +00:00 committed by Richard Biener
parent f8bdb6a56b
commit 4b1b9e64ce
2 changed files with 25 additions and 35 deletions

View File

@ -1,3 +1,9 @@
2015-08-04 Richard Biener <rguenther@suse.de>
* gimple-fold.c (gimple_fold_stmt_to_constant_1): Remove
dispatching to fold_binary for GIMPLE_BINARY_RHS and for
comparisons embedded in [VEC_]COND_EXPRs.
2015-08-03 Abe Skolnik <a.skolnik@samsung.com>
* tree-if-conv.c: Fix various typos in comments.

View File

@ -5008,28 +5008,26 @@ gimple_fold_stmt_to_constant_1 (gimple stmt, tree (*valueize) (tree),
return NULL_TREE;
case GIMPLE_BINARY_RHS:
{
/* Handle binary operators that can appear in GIMPLE form. */
tree op0 = (*valueize) (gimple_assign_rhs1 (stmt));
tree op1 = (*valueize) (gimple_assign_rhs2 (stmt));
/* Translate &x + CST into an invariant form suitable for
further propagation. */
if (subcode == POINTER_PLUS_EXPR)
{
/* Handle binary operators that can appear in GIMPLE form. */
tree op0 = (*valueize) (gimple_assign_rhs1 (stmt));
tree op1 = (*valueize) (gimple_assign_rhs2 (stmt));
/* Translate &x + CST into an invariant form suitable for
further propagation. */
if (gimple_assign_rhs_code (stmt) == POINTER_PLUS_EXPR
&& TREE_CODE (op0) == ADDR_EXPR
&& TREE_CODE (op1) == INTEGER_CST)
{
tree off = fold_convert (ptr_type_node, op1);
return build_fold_addr_expr_loc
(loc,
fold_build2 (MEM_REF,
TREE_TYPE (TREE_TYPE (op0)),
unshare_expr (op0), off));
}
return fold_binary_loc (loc, subcode,
gimple_expr_type (stmt), op0, op1);
}
if (TREE_CODE (op0) == ADDR_EXPR
&& TREE_CODE (op1) == INTEGER_CST)
{
tree off = fold_convert (ptr_type_node, op1);
return build_fold_addr_expr_loc
(loc,
fold_build2 (MEM_REF,
TREE_TYPE (TREE_TYPE (op0)),
unshare_expr (op0), off));
}
}
return NULL_TREE;
case GIMPLE_TERNARY_RHS:
{
@ -5037,20 +5035,6 @@ gimple_fold_stmt_to_constant_1 (gimple stmt, tree (*valueize) (tree),
tree op0 = (*valueize) (gimple_assign_rhs1 (stmt));
tree op1 = (*valueize) (gimple_assign_rhs2 (stmt));
tree op2 = (*valueize) (gimple_assign_rhs3 (stmt));
/* Fold embedded expressions in ternary codes. */
if ((subcode == COND_EXPR
|| subcode == VEC_COND_EXPR)
&& COMPARISON_CLASS_P (op0))
{
tree op00 = (*valueize) (TREE_OPERAND (op0, 0));
tree op01 = (*valueize) (TREE_OPERAND (op0, 1));
tree tem = fold_binary_loc (loc, TREE_CODE (op0),
TREE_TYPE (op0), op00, op01);
if (tem)
op0 = tem;
}
return fold_ternary_loc (loc, subcode,
gimple_expr_type (stmt), op0, op1, op2);
}