This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [02/46] Remove dead vectorizable_reduction code
- From: Richard Biener <richard dot guenther at gmail dot com>
- To: GCC Patches <gcc-patches at gcc dot gnu dot org>, richard dot sandiford at arm dot com
- Date: Wed, 25 Jul 2018 10:43:33 +0200
- Subject: Re: [02/46] Remove dead vectorizable_reduction code
- References: <87wotlrmen.fsf@arm.com> <87o9exrmcu.fsf@arm.com>
On Tue, Jul 24, 2018 at 11:53 AM Richard Sandiford
<richard.sandiford@arm.com> wrote:
>
> vectorizable_reduction has old code to cope with cases in which the
> given statement belongs to a reduction group but isn't the first statement.
> That can no longer happen, since all statements in the group go into the
> same SLP node, and we only check the first statement in each node.
>
> The point is to remove the only path through vectorizable_reduction
> in which stmt and stmt_info refer to different statements.
OK.
>
> 2018-07-24 Richard Sandiford <richard.sandiford@arm.com>
>
> gcc/
> * tree-vect-loop.c (vectorizable_reduction): Assert that the
> function is not called for second and subsequent members of
> a reduction group.
>
> Index: gcc/tree-vect-loop.c
> ===================================================================
> --- gcc/tree-vect-loop.c 2018-07-24 10:22:02.965552667 +0100
> +++ gcc/tree-vect-loop.c 2018-07-24 10:22:06.269523330 +0100
> @@ -6162,7 +6162,6 @@ vectorizable_reduction (gimple *stmt, gi
> auto_vec<gimple *> phis;
> int vec_num;
> tree def0, tem;
> - bool first_p = true;
> tree cr_index_scalar_type = NULL_TREE, cr_index_vector_type = NULL_TREE;
> tree cond_reduc_val = NULL_TREE;
>
> @@ -6178,15 +6177,8 @@ vectorizable_reduction (gimple *stmt, gi
> nested_cycle = true;
> }
>
> - /* In case of reduction chain we switch to the first stmt in the chain, but
> - we don't update STMT_INFO, since only the last stmt is marked as reduction
> - and has reduction properties. */
> - if (REDUC_GROUP_FIRST_ELEMENT (stmt_info)
> - && REDUC_GROUP_FIRST_ELEMENT (stmt_info) != stmt)
> - {
> - stmt = REDUC_GROUP_FIRST_ELEMENT (stmt_info);
> - first_p = false;
> - }
> + if (REDUC_GROUP_FIRST_ELEMENT (stmt_info))
> + gcc_assert (slp_node && REDUC_GROUP_FIRST_ELEMENT (stmt_info) == stmt);
>
> if (gimple_code (stmt) == GIMPLE_PHI)
> {
> @@ -7050,8 +7042,7 @@ vectorizable_reduction (gimple *stmt, gi
>
> if (!vec_stmt) /* transformation not required. */
> {
> - if (first_p)
> - vect_model_reduction_cost (stmt_info, reduc_fn, ncopies, cost_vec);
> + vect_model_reduction_cost (stmt_info, reduc_fn, ncopies, cost_vec);
> if (loop_vinfo && LOOP_VINFO_CAN_FULLY_MASK_P (loop_vinfo))
> {
> if (reduction_type != FOLD_LEFT_REDUCTION