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-vect-generic.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-vect-generic.c')
-rw-r--r-- | gcc/tree-vect-generic.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/gcc/tree-vect-generic.c b/gcc/tree-vect-generic.c index 6555932..dc01ce7 100644 --- a/gcc/tree-vect-generic.c +++ b/gcc/tree-vect-generic.c @@ -649,7 +649,7 @@ lower_vec_perm (gimple_stmt_iterator *gsi) tree vals = TREE_VECTOR_CST_ELTS (mask); for (i = 0; i < elements; ++i, vals = TREE_CHAIN (vals)) - sel_int[i] = TREE_INT_CST_LOW (TREE_VALUE (vals)); + sel_int[i] = TREE_INT_CST_LOW (TREE_VALUE (vals)) & (2 * elements - 1); if (can_vec_perm_p (TYPE_MODE (vect_type), false, sel_int)) return; |