aboutsummaryrefslogtreecommitdiff
path: root/gcc/gimple-fold.c
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2011-10-05 10:54:14 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2011-10-05 10:54:14 +0000
commitd3878abfccb6f6b9235bdf084f28ebe6cc1cc490 (patch)
tree8f305cd98368d269f8bb3b30639fd03210cf77df /gcc/gimple-fold.c
parentd75fbd3dbf7f1a5bf91ccc55acf312cba4f91bae (diff)
downloadgcc-d3878abfccb6f6b9235bdf084f28ebe6cc1cc490.zip
gcc-d3878abfccb6f6b9235bdf084f28ebe6cc1cc490.tar.gz
gcc-d3878abfccb6f6b9235bdf084f28ebe6cc1cc490.tar.bz2
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
Diffstat (limited to 'gcc/gimple-fold.c')
-rw-r--r--gcc/gimple-fold.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c
index 179535e..fcfbcc8 100644
--- a/gcc/gimple-fold.c
+++ b/gcc/gimple-fold.c
@@ -2569,6 +2569,19 @@ gimple_fold_stmt_to_constant_1 (gimple stmt, tree (*valueize) (tree))
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);
}