fold-const.c (fold_binary_op_with_conditional_arg): Handle vectors.
2012-10-30 Marc Glisse <marc.glisse@inria.fr> * fold-const.c (fold_binary_op_with_conditional_arg): Handle vectors. (fold_binary_loc): call it for VEC_COND_EXPR. From-SVN: r192986
This commit is contained in:
parent
4fda1ad1dc
commit
2e2e628b24
2 changed files with 18 additions and 4 deletions
|
@ -1,3 +1,8 @@
|
|||
2012-10-30 Marc Glisse <marc.glisse@inria.fr>
|
||||
|
||||
* fold-const.c (fold_binary_op_with_conditional_arg): Handle vectors.
|
||||
(fold_binary_loc): call it for VEC_COND_EXPR.
|
||||
|
||||
2012-10-30 James Greenhalgh <james.greenhalgh@arm.com>
|
||||
Tejas Belagod <tejas.belagod@arm.com>
|
||||
|
||||
|
|
|
@ -5959,8 +5959,10 @@ fold_binary_op_with_conditional_arg (location_t loc,
|
|||
tree test, true_value, false_value;
|
||||
tree lhs = NULL_TREE;
|
||||
tree rhs = NULL_TREE;
|
||||
enum tree_code cond_code = COND_EXPR;
|
||||
|
||||
if (TREE_CODE (cond) == COND_EXPR)
|
||||
if (TREE_CODE (cond) == COND_EXPR
|
||||
|| TREE_CODE (cond) == VEC_COND_EXPR)
|
||||
{
|
||||
test = TREE_OPERAND (cond, 0);
|
||||
true_value = TREE_OPERAND (cond, 1);
|
||||
|
@ -5981,6 +5983,9 @@ fold_binary_op_with_conditional_arg (location_t loc,
|
|||
false_value = constant_boolean_node (false, testtype);
|
||||
}
|
||||
|
||||
if (TREE_CODE (TREE_TYPE (test)) == VECTOR_TYPE)
|
||||
cond_code = VEC_COND_EXPR;
|
||||
|
||||
/* This transformation is only worthwhile if we don't have to wrap ARG
|
||||
in a SAVE_EXPR and the operation can be simplified on at least one
|
||||
of the branches once its pushed inside the COND_EXPR. */
|
||||
|
@ -6011,7 +6016,7 @@ fold_binary_op_with_conditional_arg (location_t loc,
|
|||
if (!TREE_CONSTANT (arg) && !TREE_CONSTANT (lhs) && !TREE_CONSTANT (rhs))
|
||||
return NULL_TREE;
|
||||
|
||||
return fold_build3_loc (loc, COND_EXPR, type, test, lhs, rhs);
|
||||
return fold_build3_loc (loc, cond_code, type, test, lhs, rhs);
|
||||
}
|
||||
|
||||
|
||||
|
@ -9871,7 +9876,9 @@ fold_binary_loc (location_t loc,
|
|||
tem);
|
||||
}
|
||||
|
||||
if (TREE_CODE (arg0) == COND_EXPR || COMPARISON_CLASS_P (arg0))
|
||||
if (TREE_CODE (arg0) == COND_EXPR
|
||||
|| TREE_CODE (arg0) == VEC_COND_EXPR
|
||||
|| COMPARISON_CLASS_P (arg0))
|
||||
{
|
||||
tem = fold_binary_op_with_conditional_arg (loc, code, type, op0, op1,
|
||||
arg0, arg1,
|
||||
|
@ -9880,7 +9887,9 @@ fold_binary_loc (location_t loc,
|
|||
return tem;
|
||||
}
|
||||
|
||||
if (TREE_CODE (arg1) == COND_EXPR || COMPARISON_CLASS_P (arg1))
|
||||
if (TREE_CODE (arg1) == COND_EXPR
|
||||
|| TREE_CODE (arg1) == VEC_COND_EXPR
|
||||
|| COMPARISON_CLASS_P (arg1))
|
||||
{
|
||||
tem = fold_binary_op_with_conditional_arg (loc, code, type, op0, op1,
|
||||
arg1, arg0,
|
||||
|
|
Loading…
Add table
Reference in a new issue