gimple-fold.c (gimple_fold_stmt_to_constant_1): For ternary ops with an embedded expression valueize and fold that as well.
2011-10-05 Richard Guenther <rguenther@suse.de> * gimple-fold.c (gimple_fold_stmt_to_constant_1): For ternary ops with an embedded expression valueize and fold that as well. * tree-ssa-sccvn.c (try_to_simplify): Also allow SSA name results from gimple_fold_stmt_to_constant_1. From-SVN: r179543
This commit is contained in:
parent
d75fbd3dbf
commit
d3878abfcc
|
@ -1,3 +1,11 @@
|
||||||
|
2011-10-05 Richard Guenther <rguenther@suse.de>
|
||||||
|
|
||||||
|
* gimple-fold.c (gimple_fold_stmt_to_constant_1): For
|
||||||
|
ternary ops with an embedded expression valueize and fold
|
||||||
|
that as well.
|
||||||
|
* tree-ssa-sccvn.c (try_to_simplify): Also allow SSA name
|
||||||
|
results from gimple_fold_stmt_to_constant_1.
|
||||||
|
|
||||||
2011-10-05 Nick Clifton <nickc@redhat.com>
|
2011-10-05 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
* config/rx/rx.md (tablejump): Add missing label.
|
* config/rx/rx.md (tablejump): Add missing label.
|
||||||
|
|
|
@ -2569,6 +2569,19 @@ gimple_fold_stmt_to_constant_1 (gimple stmt, tree (*valueize) (tree))
|
||||||
tree op1 = (*valueize) (gimple_assign_rhs2 (stmt));
|
tree op1 = (*valueize) (gimple_assign_rhs2 (stmt));
|
||||||
tree op2 = (*valueize) (gimple_assign_rhs3 (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,
|
return fold_ternary_loc (loc, subcode,
|
||||||
gimple_expr_type (stmt), op0, op1, op2);
|
gimple_expr_type (stmt), op0, op1, op2);
|
||||||
}
|
}
|
||||||
|
|
|
@ -2967,27 +2967,29 @@ simplify_unary_expression (gimple stmt)
|
||||||
static tree
|
static tree
|
||||||
try_to_simplify (gimple stmt)
|
try_to_simplify (gimple stmt)
|
||||||
{
|
{
|
||||||
|
enum tree_code code = gimple_assign_rhs_code (stmt);
|
||||||
tree tem;
|
tree tem;
|
||||||
|
|
||||||
/* For stores we can end up simplifying a SSA_NAME rhs. Just return
|
/* For stores we can end up simplifying a SSA_NAME rhs. Just return
|
||||||
in this case, there is no point in doing extra work. */
|
in this case, there is no point in doing extra work. */
|
||||||
if (gimple_assign_copy_p (stmt)
|
if (code == SSA_NAME)
|
||||||
&& TREE_CODE (gimple_assign_rhs1 (stmt)) == SSA_NAME)
|
|
||||||
return NULL_TREE;
|
return NULL_TREE;
|
||||||
|
|
||||||
/* First try constant folding based on our current lattice. */
|
/* First try constant folding based on our current lattice. */
|
||||||
tem = gimple_fold_stmt_to_constant (stmt, vn_valueize);
|
tem = gimple_fold_stmt_to_constant_1 (stmt, vn_valueize);
|
||||||
if (tem)
|
if (tem
|
||||||
|
&& (TREE_CODE (tem) == SSA_NAME
|
||||||
|
|| is_gimple_min_invariant (tem)))
|
||||||
return tem;
|
return tem;
|
||||||
|
|
||||||
/* If that didn't work try combining multiple statements. */
|
/* If that didn't work try combining multiple statements. */
|
||||||
switch (TREE_CODE_CLASS (gimple_assign_rhs_code (stmt)))
|
switch (TREE_CODE_CLASS (code))
|
||||||
{
|
{
|
||||||
case tcc_reference:
|
case tcc_reference:
|
||||||
/* Fallthrough for some codes that can operate on registers. */
|
/* Fallthrough for some unary codes that can operate on registers. */
|
||||||
if (!(TREE_CODE (gimple_assign_rhs1 (stmt)) == REALPART_EXPR
|
if (!(code == REALPART_EXPR
|
||||||
|| TREE_CODE (gimple_assign_rhs1 (stmt)) == IMAGPART_EXPR
|
|| code == IMAGPART_EXPR
|
||||||
|| TREE_CODE (gimple_assign_rhs1 (stmt)) == VIEW_CONVERT_EXPR))
|
|| code == VIEW_CONVERT_EXPR))
|
||||||
break;
|
break;
|
||||||
/* We could do a little more with unary ops, if they expand
|
/* We could do a little more with unary ops, if they expand
|
||||||
into binary ops, but it's debatable whether it is worth it. */
|
into binary ops, but it's debatable whether it is worth it. */
|
||||||
|
|
Loading…
Reference in New Issue