diff options
author | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2015-05-22 09:00:28 +0000 |
---|---|---|
committer | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2015-05-22 09:00:28 +0000 |
commit | 95fd35782c03940e19c9e6625143dc96d1b68c72 (patch) | |
tree | d0eacad77020a0aa1c97435bd56829e44fc17a26 /gcc/tree-vect-slp.c | |
parent | 741d8227d7709142448529e94229b02433b5ed5a (diff) | |
download | gcc-95fd35782c03940e19c9e6625143dc96d1b68c72.tar.gz |
2015-05-22 Richard Biener <rguenther@suse.de>
* tree-vect-loop.c (get_reduction_op): New function.
(vect_model_reduction_cost): Use it, add reduc_index parameter.
Make ready for BB reductions.
(vect_create_epilog_for_reduction): Use get_reduction_op.
(vectorizable_reduction): Init reduc_index to a valid value.
Adjust vect_model_reduction_cost call.
* tree-vect-slp.c (vect_get_constant_vectors): Use the proper
operand for reduction defaults. Add SAD_EXPR support.
Assert we have a neutral op for SLP reductions.
* tree-vect-stmts.c (vect_mark_stmts_to_be_vectorized): When
walking pattern stmt ops only recurse to SSA names.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@223526 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-vect-slp.c')
-rw-r--r-- | gcc/tree-vect-slp.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/gcc/tree-vect-slp.c b/gcc/tree-vect-slp.c index cad1604b438..21489b3ed3a 100644 --- a/gcc/tree-vect-slp.c +++ b/gcc/tree-vect-slp.c @@ -2664,11 +2664,14 @@ vect_get_constant_vectors (tree op, slp_tree slp_node, struct loop *loop; gimple_seq ctor_seq = NULL; + vector_type = get_vectype_for_scalar_type (TREE_TYPE (op)); + nunits = TYPE_VECTOR_SUBPARTS (vector_type); + if (STMT_VINFO_DEF_TYPE (stmt_vinfo) == vect_reduction_def && reduc_index != -1) { - op_num = reduc_index - 1; - op = gimple_op (stmt, reduc_index); + op_num = reduc_index; + op = gimple_op (stmt, op_num + 1); /* For additional copies (see the explanation of NUMBER_OF_COPIES below) we need either neutral operands or the original operands. See get_initial_def_for_reduction() for details. */ @@ -2676,6 +2679,7 @@ vect_get_constant_vectors (tree op, slp_tree slp_node, { case WIDEN_SUM_EXPR: case DOT_PROD_EXPR: + case SAD_EXPR: case PLUS_EXPR: case MINUS_EXPR: case BIT_IOR_EXPR: @@ -2716,6 +2720,7 @@ vect_get_constant_vectors (tree op, slp_tree slp_node, break; default: + gcc_assert (!GROUP_FIRST_ELEMENT (stmt_vinfo)); neutral_op = NULL; } } @@ -2735,10 +2740,6 @@ vect_get_constant_vectors (tree op, slp_tree slp_node, else constant_p = false; - vector_type = get_vectype_for_scalar_type (TREE_TYPE (op)); - gcc_assert (vector_type); - nunits = TYPE_VECTOR_SUBPARTS (vector_type); - /* NUMBER_OF_COPIES is the number of times we need to use the same values in created vectors. It is greater than 1 if unrolling is performed. |