aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2018-07-31 14:21:28 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2018-07-31 14:21:28 +0000
commit83a400d0a57c998508c31389286d6fb427985139 (patch)
tree5551e43e4a609503e06b309ca98dc586c9cac420
parent6e2dd807c2aaaba8906a36766b9f98dfbeddc27d (diff)
downloadgcc-83a400d0a57c998508c31389286d6fb427985139.zip
gcc-83a400d0a57c998508c31389286d6fb427985139.tar.gz
gcc-83a400d0a57c998508c31389286d6fb427985139.tar.bz2
[04/46] Factor out the test for a valid reduction input
vect_is_slp_reduction and vect_is_simple_reduction had two instances each of: && (is_gimple_assign (def_stmt) || is_gimple_call (def_stmt) || STMT_VINFO_DEF_TYPE (vinfo_for_stmt (def_stmt)) == vect_induction_def || (gimple_code (def_stmt) == GIMPLE_PHI && STMT_VINFO_DEF_TYPE (vinfo_for_stmt (def_stmt)) == vect_internal_def && !is_loop_header_bb_p (gimple_bb (def_stmt))))) This patch splits it out in a subroutine. 2018-07-31 Richard Sandiford <richard.sandiford@arm.com> gcc/ * tree-vect-loop.c (vect_valid_reduction_input_p): New function, split out from... (vect_is_slp_reduction): ...here... (vect_is_simple_reduction): ...and here. Remove repetition of tests that are already known to be false. From-SVN: r263119
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/tree-vect-loop.c57
2 files changed, 29 insertions, 36 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e7ff270..122d99f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,13 @@
2018-07-31 Richard Sandiford <richard.sandiford@arm.com>
+ * tree-vect-loop.c (vect_valid_reduction_input_p): New function,
+ split out from...
+ (vect_is_slp_reduction): ...here...
+ (vect_is_simple_reduction): ...and here. Remove repetition of tests
+ that are already known to be false.
+
+2018-07-31 Richard Sandiford <richard.sandiford@arm.com>
+
* tree-vectorizer.h (vect_free_slp_instance): Add a final_p parameter.
* tree-vect-slp.c (vect_free_slp_tree): Likewise. Don't update
STMT_VINFO_NUM_SLP_USES when it's true.
diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c
index 9be3d31..dbb14ee 100644
--- a/gcc/tree-vect-loop.c
+++ b/gcc/tree-vect-loop.c
@@ -2501,6 +2501,21 @@ report_vect_op (dump_flags_t msg_type, gimple *stmt, const char *msg)
dump_gimple_stmt (msg_type, TDF_SLIM, stmt, 0);
}
+/* DEF_STMT occurs in a loop that contains a potential reduction operation.
+ Return true if the results of DEF_STMT are something that can be
+ accumulated by such a reduction. */
+
+static bool
+vect_valid_reduction_input_p (gimple *def_stmt)
+{
+ stmt_vec_info def_stmt_info = vinfo_for_stmt (def_stmt);
+ return (is_gimple_assign (def_stmt)
+ || is_gimple_call (def_stmt)
+ || STMT_VINFO_DEF_TYPE (def_stmt_info) == vect_induction_def
+ || (gimple_code (def_stmt) == GIMPLE_PHI
+ && STMT_VINFO_DEF_TYPE (def_stmt_info) == vect_internal_def
+ && !is_loop_header_bb_p (gimple_bb (def_stmt))));
+}
/* Detect SLP reduction of the form:
@@ -2624,16 +2639,9 @@ vect_is_slp_reduction (loop_vec_info loop_info, gimple *phi,
("vect_internal_def"), or it's an induction (defined by a
loop-header phi-node). */
if (def_stmt
- && gimple_bb (def_stmt)
+ && gimple_bb (def_stmt)
&& flow_bb_inside_loop_p (loop, gimple_bb (def_stmt))
- && (is_gimple_assign (def_stmt)
- || is_gimple_call (def_stmt)
- || STMT_VINFO_DEF_TYPE (vinfo_for_stmt (def_stmt))
- == vect_induction_def
- || (gimple_code (def_stmt) == GIMPLE_PHI
- && STMT_VINFO_DEF_TYPE (vinfo_for_stmt (def_stmt))
- == vect_internal_def
- && !is_loop_header_bb_p (gimple_bb (def_stmt)))))
+ && vect_valid_reduction_input_p (def_stmt))
{
lhs = gimple_assign_lhs (next_stmt);
next_stmt = REDUC_GROUP_NEXT_ELEMENT (vinfo_for_stmt (next_stmt));
@@ -2654,16 +2662,9 @@ vect_is_slp_reduction (loop_vec_info loop_info, gimple *phi,
("vect_internal_def"), or it's an induction (defined by a
loop-header phi-node). */
if (def_stmt
- && gimple_bb (def_stmt)
+ && gimple_bb (def_stmt)
&& flow_bb_inside_loop_p (loop, gimple_bb (def_stmt))
- && (is_gimple_assign (def_stmt)
- || is_gimple_call (def_stmt)
- || STMT_VINFO_DEF_TYPE (vinfo_for_stmt (def_stmt))
- == vect_induction_def
- || (gimple_code (def_stmt) == GIMPLE_PHI
- && STMT_VINFO_DEF_TYPE (vinfo_for_stmt (def_stmt))
- == vect_internal_def
- && !is_loop_header_bb_p (gimple_bb (def_stmt)))))
+ && vect_valid_reduction_input_p (def_stmt))
{
if (dump_enabled_p ())
{
@@ -3196,15 +3197,7 @@ vect_is_simple_reduction (loop_vec_info loop_info, gimple *phi,
&& (code == COND_EXPR
|| !def1 || gimple_nop_p (def1)
|| !flow_bb_inside_loop_p (loop, gimple_bb (def1))
- || (def1 && flow_bb_inside_loop_p (loop, gimple_bb (def1))
- && (is_gimple_assign (def1)
- || is_gimple_call (def1)
- || STMT_VINFO_DEF_TYPE (vinfo_for_stmt (def1))
- == vect_induction_def
- || (gimple_code (def1) == GIMPLE_PHI
- && STMT_VINFO_DEF_TYPE (vinfo_for_stmt (def1))
- == vect_internal_def
- && !is_loop_header_bb_p (gimple_bb (def1)))))))
+ || vect_valid_reduction_input_p (def1)))
{
if (dump_enabled_p ())
report_vect_op (MSG_NOTE, def_stmt, "detected reduction: ");
@@ -3215,15 +3208,7 @@ vect_is_simple_reduction (loop_vec_info loop_info, gimple *phi,
&& (code == COND_EXPR
|| !def2 || gimple_nop_p (def2)
|| !flow_bb_inside_loop_p (loop, gimple_bb (def2))
- || (def2 && flow_bb_inside_loop_p (loop, gimple_bb (def2))
- && (is_gimple_assign (def2)
- || is_gimple_call (def2)
- || STMT_VINFO_DEF_TYPE (vinfo_for_stmt (def2))
- == vect_induction_def
- || (gimple_code (def2) == GIMPLE_PHI
- && STMT_VINFO_DEF_TYPE (vinfo_for_stmt (def2))
- == vect_internal_def
- && !is_loop_header_bb_p (gimple_bb (def2)))))))
+ || vect_valid_reduction_input_p (def2)))
{
if (! nested_in_vect_loop && orig_code != MINUS_EXPR)
{