From 43157fa00494d635e1882c9096c777768599e006 Mon Sep 17 00:00:00 2001 From: rsandifo Date: Tue, 31 Jul 2018 14:21:17 +0000 Subject: [PATCH] [02/46] Remove dead vectorizable_reduction code 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. 2018-07-31 Richard Sandiford gcc/ * tree-vect-loop.c (vectorizable_reduction): Assert that the function is not called for second and subsequent members of a reduction group. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@263117 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 6 ++++++ gcc/tree-vect-loop.c | 15 +++------------ 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 391cc6548f0..39c280b42e7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2018-07-31 Richard Sandiford + * tree-vect-loop.c (vectorizable_reduction): Assert that the + function is not called for second and subsequent members of + a reduction group. + +2018-07-31 Richard Sandiford + * tree-vect-loop.c (get_initial_def_for_reduction): Move special cases for nested loops from here to ... (vect_create_epilog_for_reduction): ...here. Only call diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c index 18fa30ba16d..fb818c65202 100644 --- a/gcc/tree-vect-loop.c +++ b/gcc/tree-vect-loop.c @@ -6162,7 +6162,6 @@ vectorizable_reduction (gimple *stmt, gimple_stmt_iterator *gsi, auto_vec 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, gimple_stmt_iterator *gsi, 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, gimple_stmt_iterator *gsi, 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 -- 2.11.4.GIT