aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-propagate.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2011-11-11 20:55:23 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2011-11-11 20:55:23 +0100
commit22d8712ac4f4f04786d4a2428cde756b065b9f97 (patch)
treeda6d861de02810601827aa20e1dd872a3b954e96 /gcc/tree-ssa-propagate.c
parent0540978881f0e0de7d84c470628a1897b01b6831 (diff)
downloadgcc-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.c10
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;