gimple-fold.c (fold_gimple_assign): Remove folding of the comparison in COND_EXPRs.

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

	* gimple-fold.c (fold_gimple_assign): Remove folding of
	the comparison in COND_EXPRs.

From-SVN: r226489
This commit is contained in:
Richard Biener 2015-08-03 07:28:11 +00:00 committed by Richard Biener
parent a0c012fda9
commit 5c099d40da
2 changed files with 10 additions and 43 deletions

View File

@ -1,3 +1,8 @@
2015-08-03 Richard Biener <rguenther@suse.de>
* gimple-fold.c (fold_gimple_assign): Remove folding of
the comparison in COND_EXPRs.
2015-08-03 Richard Biener <rguenther@suse.de>
* gimple-match-head.c (gimple_simplify): For [VEC_]COND_EXPRs

View File

@ -416,49 +416,11 @@ fold_gimple_assign (gimple_stmt_iterator *si)
break;
case GIMPLE_TERNARY_RHS:
/* Try to fold a conditional expression. */
if (gimple_assign_rhs_code (stmt) == COND_EXPR)
{
tree op0 = gimple_assign_rhs1 (stmt);
tree tem;
bool set = false;
location_t cond_loc = gimple_location (stmt);
if (COMPARISON_CLASS_P (op0))
{
fold_defer_overflow_warnings ();
tem = fold_binary_loc (cond_loc,
TREE_CODE (op0), TREE_TYPE (op0),
TREE_OPERAND (op0, 0),
TREE_OPERAND (op0, 1));
/* This is actually a conditional expression, not a GIMPLE
conditional statement, however, the valid_gimple_rhs_p
test still applies. */
set = (tem && is_gimple_condexpr (tem)
&& valid_gimple_rhs_p (tem));
fold_undefer_overflow_warnings (set, stmt, 0);
}
else if (is_gimple_min_invariant (op0))
{
tem = op0;
set = true;
}
else
return NULL_TREE;
if (set)
result = fold_build3_loc (cond_loc, COND_EXPR,
TREE_TYPE (gimple_assign_lhs (stmt)), tem,
gimple_assign_rhs2 (stmt),
gimple_assign_rhs3 (stmt));
}
if (!result)
result = fold_ternary_loc (loc, subcode,
TREE_TYPE (gimple_assign_lhs (stmt)),
gimple_assign_rhs1 (stmt),
gimple_assign_rhs2 (stmt),
gimple_assign_rhs3 (stmt));
result = fold_ternary_loc (loc, subcode,
TREE_TYPE (gimple_assign_lhs (stmt)),
gimple_assign_rhs1 (stmt),
gimple_assign_rhs2 (stmt),
gimple_assign_rhs3 (stmt));
if (result)
{