diff options
author | Jakub Jelinek <jakub@redhat.com> | 2011-11-11 20:55:23 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2011-11-11 20:55:23 +0100 |
commit | 22d8712ac4f4f04786d4a2428cde756b065b9f97 (patch) | |
tree | da6d861de02810601827aa20e1dd872a3b954e96 /gcc/tree-ssa-propagate.c | |
parent | 0540978881f0e0de7d84c470628a1897b01b6831 (diff) | |
download | gcc-22d8712ac4f4f04786d4a2428cde756b065b9f97.zip gcc-22d8712ac4f4f04786d4a2428cde756b065b9f97.tar.gz gcc-22d8712ac4f4f04786d4a2428cde756b065b9f97.tar.bz2 |
re PR tree-optimization/51074 (No constant folding performed for VEC_PERM_EXPR, VEC_INTERLEAVE*EXPR, VEC_EXTRACT*EXPR)
PR tree-optimization/51074
* fold-const.c (vec_cst_ctor_to_array, fold_vec_perm): New functions.
(fold_binary_loc): Handle VEC_EXTRACT_EVEN_EXPR,
VEC_EXTRACT_ODD_EXPR, VEC_INTERLEAVE_HIGH_EXPR and
VEC_INTERLEAVE_LOW_EXPR with VECTOR_CST or CONSTRUCTOR operands.
(fold_ternary_loc): Handle VEC_PERM_EXPR with VECTOR_CST or
CONSTRUCTOR operands.
* tree-ssa-propagate.c (valid_gimple_rhs_p): Handle ternary
expressions.
* tree-vect-generic.c (lower_vec_perm): Mask sel_int elements
to 0 .. 2 * elements - 1.
From-SVN: r181297
Diffstat (limited to 'gcc/tree-ssa-propagate.c')
-rw-r--r-- | gcc/tree-ssa-propagate.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/gcc/tree-ssa-propagate.c b/gcc/tree-ssa-propagate.c index 05abaa5..80b33e1 100644 --- a/gcc/tree-ssa-propagate.c +++ b/gcc/tree-ssa-propagate.c @@ -602,6 +602,16 @@ valid_gimple_rhs_p (tree expr) break; default: + if (get_gimple_rhs_class (code) == GIMPLE_TERNARY_RHS) + { + if (((code == VEC_COND_EXPR || code == COND_EXPR) + ? !is_gimple_condexpr (TREE_OPERAND (expr, 0)) + : !is_gimple_val (TREE_OPERAND (expr, 0))) + || !is_gimple_val (TREE_OPERAND (expr, 1)) + || !is_gimple_val (TREE_OPERAND (expr, 2))) + return false; + break; + } return false; } break; |