aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2018-07-31 14:21:17 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2018-07-31 14:21:17 +0000
commitac1359be3a39f4d12342c98c2a2e77bd59a839f4 (patch)
tree55bb816655bd609e6ffbfdfae2ac19e7502a0ec5 /gcc
parent0847049dc7a630e4bfa079767ed42c742ff6276b (diff)
downloadgcc-ac1359be3a39f4d12342c98c2a2e77bd59a839f4.zip
gcc-ac1359be3a39f4d12342c98c2a2e77bd59a839f4.tar.gz
gcc-ac1359be3a39f4d12342c98c2a2e77bd59a839f4.tar.bz2
[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 <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. From-SVN: r263117
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/tree-vect-loop.c15
2 files changed, 9 insertions, 12 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 391cc65..39c280b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,11 @@
2018-07-31 Richard Sandiford <richard.sandiford@arm.com>
+ * 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 <richard.sandiford@arm.com>
+
* 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 18fa30b..fb818c6 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<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, 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