This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [04/46] Factor out the test for a valid reduction input


On Tue, Jul 24, 2018 at 11:54 AM Richard Sandiford
<richard.sandiford@arm.com> wrote:
>
> 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.

OK

>
> 2018-07-24  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.
>
> Index: gcc/tree-vect-loop.c
> ===================================================================
> --- gcc/tree-vect-loop.c        2018-07-24 10:22:09.237496975 +0100
> +++ gcc/tree-vect-loop.c        2018-07-24 10:22:12.737465897 +0100
> @@ -2501,6 +2501,21 @@ report_vect_op (dump_flags_t msg_type, g
>    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 loo
>              ("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 loo
>              ("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
>        && (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
>        && (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)
>         {


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]