This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [7/n] PR85694: Add a vect_pattern_detected helper
- 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: Tue, 19 Jun 2018 12:00:31 +0200
- Subject: Re: [7/n] PR85694: Add a vect_pattern_detected helper
- References: <87sh5kf8d0.fsf@arm.com>
On Mon, Jun 18, 2018 at 5:00 PM Richard Sandiford
<richard.sandiford@arm.com> wrote:
>
> This message is a long write-up for a patch that simply adds a common
> routine for printing the "vector_foo_pattern: detected:" messages.
>
> The reason for doing this is that some routines check for target support
> themselves and some leave it to vect_pattern_recog_1. Those that leave
> it to vect_pattern_recog_1 currently print these "detected:" messages if
> the statements have the right form, even if the pattern is eventually
> discarded. IMO that's useful, and a lot of existing scan tests rely on it.
>
> However, a later patch makes patterns do their own testing, and stops
> them creating pattern statements until the tests have passed. This means
> (a) they need to print the "detected:" message earlier and (b) the pattern
> statement won't be around to print.
>
> The patch therefore makes all routines print the original statement
> rather than the pattern one. That information isn't obvious otherwise,
> whereas vect_pattern_recog_1 already prints the pattern statement
> in the case of a successful match. This also avoids the previous
> situation in which a routine could print "detected:" and then
> silently bail out before saying what had been detected.
>
> Tested on aarch64-linux-gnu and x86_64-linux-gnu. OK to install?
OK.
Richard.
> Richard
>
>
> 2018-06-18 Richard Sandiford <richard.sandiford@arm.com>
>
> gcc/
> * tree-vect-patterns.c (vect_pattern_detected): New function.
> (vect_recog_dot_prod_patternm, vect_recog_sad_pattern)
> (vect_recog_widen_mult_pattern, vect_recog_widen_sum_pattern)
> (vect_recog_over_widening_pattern, vect_recog_widen_shift_pattern
> (vect_recog_rotate_pattern, vect_recog_vector_vector_shift_pattern)
> (vect_recog_mult_pattern, vect_recog_divmod_pattern)
> (vect_recog_mixed_size_cond_pattern, vect_recog_bool_pattern)
> (vect_recog_mask_conversion_pattern)
> (vect_try_gather_scatter_pattern): Likewise.
>
> Index: gcc/tree-vect-patterns.c
> ===================================================================
> --- gcc/tree-vect-patterns.c 2018-06-18 15:41:33.332272879 +0100
> +++ gcc/tree-vect-patterns.c 2018-06-18 15:43:18.327344801 +0100
> @@ -107,6 +107,19 @@ static vect_recog_func vect_vect_recog_f
> { vect_recog_mask_conversion_pattern, "mask_conversion" }
> };
>
> +/* Report that we've found an instance of pattern PATTERN in
> + statement STMT. */
> +
> +static void
> +vect_pattern_detected (const char *name, gimple *stmt)
> +{
> + if (dump_enabled_p ())
> + {
> + dump_printf_loc (MSG_NOTE, vect_location, "%s: detected: ", name);
> + dump_gimple_stmt (MSG_NOTE, TDF_SLIM, stmt, 0);
> + }
> +}
> +
> static inline void
> append_pattern_def_seq (stmt_vec_info stmt_info, gimple *stmt)
> {
> @@ -432,22 +445,16 @@ vect_recog_dot_prod_pattern (vec<gimple
> return NULL;
> }
>
> + vect_pattern_detected ("vect_recog_dot_prod_pattern", last_stmt);
> +
> half_type = TREE_TYPE (oprnd00);
> *type_in = half_type;
> *type_out = type;
>
> - /* Pattern detected. Create a stmt to be used to replace the pattern: */
> var = vect_recog_temp_ssa_var (type, NULL);
> pattern_stmt = gimple_build_assign (var, DOT_PROD_EXPR,
> oprnd00, oprnd01, oprnd1);
>
> - if (dump_enabled_p ())
> - {
> - dump_printf_loc (MSG_NOTE, vect_location,
> - "vect_recog_dot_prod_pattern: detected: ");
> - dump_gimple_stmt (MSG_NOTE, TDF_SLIM, pattern_stmt, 0);
> - }
> -
> return pattern_stmt;
> }
>
> @@ -632,21 +639,15 @@ vect_recog_sad_pattern (vec<gimple *> *s
> || TYPE_PRECISION (sum_type) < TYPE_PRECISION (half_type0) * 2)
> return NULL;
>
> + vect_pattern_detected ("vect_recog_sad_pattern", last_stmt);
> +
> *type_in = TREE_TYPE (sad_oprnd0);
> *type_out = sum_type;
>
> - /* Pattern detected. Create a stmt to be used to replace the pattern: */
> tree var = vect_recog_temp_ssa_var (sum_type, NULL);
> gimple *pattern_stmt = gimple_build_assign (var, SAD_EXPR, sad_oprnd0,
> sad_oprnd1, plus_oprnd1);
>
> - if (dump_enabled_p ())
> - {
> - dump_printf_loc (MSG_NOTE, vect_location,
> - "vect_recog_sad_pattern: detected: ");
> - dump_gimple_stmt (MSG_NOTE, TDF_SLIM, pattern_stmt, 0);
> - }
> -
> return pattern_stmt;
> }
>
> @@ -919,9 +920,7 @@ vect_recog_widen_mult_pattern (vec<gimpl
> TYPE_UNSIGNED (type));
>
> /* Pattern detected. */
> - if (dump_enabled_p ())
> - dump_printf_loc (MSG_NOTE, vect_location,
> - "vect_recog_widen_mult_pattern: detected:\n");
> + vect_pattern_detected ("vect_recog_widen_mult_pattern", last_stmt);
>
> /* Check target support */
> vectype = get_vectype_for_scalar_type (half_type0);
> @@ -970,9 +969,6 @@ vect_recog_widen_mult_pattern (vec<gimpl
> gimple_assign_lhs (pattern_stmt));
> }
>
> - if (dump_enabled_p ())
> - dump_gimple_stmt_loc (MSG_NOTE, vect_location, TDF_SLIM, pattern_stmt, 0);
> -
> stmts->safe_push (last_stmt);
> return pattern_stmt;
> }
> @@ -1230,20 +1226,15 @@ vect_recog_widen_sum_pattern (vec<gimple
> return NULL;
>
> oprnd0 = gimple_assign_rhs1 (stmt);
> +
> + vect_pattern_detected ("vect_recog_widen_sum_pattern", last_stmt);
> +
> *type_in = half_type;
> *type_out = type;
>
> - /* Pattern detected. Create a stmt to be used to replace the pattern: */
> var = vect_recog_temp_ssa_var (type, NULL);
> pattern_stmt = gimple_build_assign (var, WIDEN_SUM_EXPR, oprnd0, oprnd1);
>
> - if (dump_enabled_p ())
> - {
> - dump_printf_loc (MSG_NOTE, vect_location,
> - "vect_recog_widen_sum_pattern: detected: ");
> - dump_gimple_stmt (MSG_NOTE, TDF_SLIM, pattern_stmt, 0);
> - }
> -
> return pattern_stmt;
> }
>
> @@ -1603,12 +1594,7 @@ vect_recog_over_widening_pattern (vec<gi
> return NULL;
>
> /* Pattern detected. */
> - if (dump_enabled_p ())
> - {
> - dump_printf_loc (MSG_NOTE, vect_location,
> - "vect_recog_over_widening_pattern: detected: ");
> - dump_gimple_stmt (MSG_NOTE, TDF_SLIM, pattern_stmt, 0);
> - }
> + vect_pattern_detected ("vect_recog_over_widening_pattern", stmts->last ());
>
> return pattern_stmt;
> }
> @@ -1740,9 +1726,7 @@ vect_recog_widen_shift_pattern (vec<gimp
> return NULL;
>
> /* Pattern detected. */
> - if (dump_enabled_p ())
> - dump_printf_loc (MSG_NOTE, vect_location,
> - "vect_recog_widen_shift_pattern: detected:\n");
> + vect_pattern_detected ("vect_recog_widen_shift_pattern", last_stmt);
>
> /* Check target support. */
> vectype = get_vectype_for_scalar_type (half_type0);
> @@ -1773,9 +1757,6 @@ vect_recog_widen_shift_pattern (vec<gimp
> STMT_VINFO_VECTYPE (new_stmt_info) = vectype;
> }
>
> - if (dump_enabled_p ())
> - dump_gimple_stmt_loc (MSG_NOTE, vect_location, TDF_SLIM, pattern_stmt, 0);
> -
> stmts->safe_push (last_stmt);
> return pattern_stmt;
> }
> @@ -2010,17 +1991,12 @@ vect_recog_rotate_pattern (vec<gimple *>
> append_pattern_def_seq (stmt_vinfo, def_stmt);
>
> /* Pattern detected. */
> - if (dump_enabled_p ())
> - dump_printf_loc (MSG_NOTE, vect_location,
> - "vect_recog_rotate_pattern: detected:\n");
> + vect_pattern_detected ("vect_recog_rotate_pattern", last_stmt);
>
> /* Pattern supported. Create a stmt to be used to replace the pattern. */
> var = vect_recog_temp_ssa_var (type, NULL);
> pattern_stmt = gimple_build_assign (var, BIT_IOR_EXPR, var1, var2);
>
> - if (dump_enabled_p ())
> - dump_gimple_stmt_loc (MSG_NOTE, vect_location, TDF_SLIM, pattern_stmt, 0);
> -
> stmts->safe_push (last_stmt);
> return pattern_stmt;
> }
> @@ -2153,17 +2129,12 @@ vect_recog_vector_vector_shift_pattern (
> }
>
> /* Pattern detected. */
> - if (dump_enabled_p ())
> - dump_printf_loc (MSG_NOTE, vect_location,
> - "vect_recog_vector_vector_shift_pattern: detected:\n");
> + vect_pattern_detected ("vect_recog_vector_vector_shift_pattern", last_stmt);
>
> /* Pattern supported. Create a stmt to be used to replace the pattern. */
> var = vect_recog_temp_ssa_var (TREE_TYPE (oprnd0), NULL);
> pattern_stmt = gimple_build_assign (var, rhs_code, oprnd0, def);
>
> - if (dump_enabled_p ())
> - dump_gimple_stmt_loc (MSG_NOTE, vect_location, TDF_SLIM, pattern_stmt, 0);
> -
> stmts->safe_push (last_stmt);
> return pattern_stmt;
> }
> @@ -2530,13 +2501,7 @@ vect_recog_mult_pattern (vec<gimple *> *
> return NULL;
>
> /* Pattern detected. */
> - if (dump_enabled_p ())
> - dump_printf_loc (MSG_NOTE, vect_location,
> - "vect_recog_mult_pattern: detected:\n");
> -
> - if (dump_enabled_p ())
> - dump_gimple_stmt_loc (MSG_NOTE, vect_location, TDF_SLIM,
> - pattern_stmt,0);
> + vect_pattern_detected ("vect_recog_mult_pattern", last_stmt);
>
> stmts->safe_push (last_stmt);
> *type_in = vectype;
> @@ -2652,9 +2617,7 @@ vect_recog_divmod_pattern (vec<gimple *>
> return NULL;
>
> /* Pattern detected. */
> - if (dump_enabled_p ())
> - dump_printf_loc (MSG_NOTE, vect_location,
> - "vect_recog_divmod_pattern: detected:\n");
> + vect_pattern_detected ("vect_recog_divmod_pattern", last_stmt);
>
> cond = build2 (LT_EXPR, boolean_type_node, oprnd0,
> build_int_cst (itype, 0));
> @@ -2738,10 +2701,6 @@ vect_recog_divmod_pattern (vec<gimple *>
> signmask);
> }
>
> - if (dump_enabled_p ())
> - dump_gimple_stmt_loc (MSG_NOTE, vect_location, TDF_SLIM, pattern_stmt,
> - 0);
> -
> stmts->safe_push (last_stmt);
>
> *type_in = vectype;
> @@ -2992,12 +2951,7 @@ vect_recog_divmod_pattern (vec<gimple *>
> }
>
> /* Pattern detected. */
> - if (dump_enabled_p ())
> - {
> - dump_printf_loc (MSG_NOTE, vect_location,
> - "vect_recog_divmod_pattern: detected: ");
> - dump_gimple_stmt (MSG_NOTE, TDF_SLIM, pattern_stmt, 0);
> - }
> + vect_pattern_detected ("vect_recog_divmod_pattern", last_stmt);
>
> stmts->safe_push (last_stmt);
>
> @@ -3157,9 +3111,7 @@ vect_recog_mixed_size_cond_pattern (vec<
> *type_in = vecitype;
> *type_out = vectype;
>
> - if (dump_enabled_p ())
> - dump_printf_loc (MSG_NOTE, vect_location,
> - "vect_recog_mixed_size_cond_pattern: detected:\n");
> + vect_pattern_detected ("vect_recog_mixed_size_cond_pattern", last_stmt);
>
> return pattern_stmt;
> }
> @@ -3729,9 +3681,7 @@ vect_recog_bool_pattern (vec<gimple *> *
> *type_out = vectype;
> *type_in = vectype;
> stmts->safe_push (last_stmt);
> - if (dump_enabled_p ())
> - dump_printf_loc (MSG_NOTE, vect_location,
> - "vect_recog_bool_pattern: detected:\n");
> + vect_pattern_detected ("vect_recog_bool_pattern", last_stmt);
>
> return pattern_stmt;
> }
> @@ -3770,9 +3720,7 @@ vect_recog_bool_pattern (vec<gimple *> *
> *type_out = vectype;
> *type_in = vectype;
> stmts->safe_push (last_stmt);
> - if (dump_enabled_p ())
> - dump_printf_loc (MSG_NOTE, vect_location,
> - "vect_recog_bool_pattern: detected:\n");
> + vect_pattern_detected ("vect_recog_bool_pattern", last_stmt);
>
> return pattern_stmt;
> }
> @@ -3829,9 +3777,8 @@ vect_recog_bool_pattern (vec<gimple *> *
> *type_out = vectype;
> *type_in = vectype;
> stmts->safe_push (last_stmt);
> - if (dump_enabled_p ())
> - dump_printf_loc (MSG_NOTE, vect_location,
> - "vect_recog_bool_pattern: detected:\n");
> + vect_pattern_detected ("vect_recog_bool_pattern", last_stmt);
> +
> return pattern_stmt;
> }
> else
> @@ -3966,9 +3913,7 @@ vect_recog_mask_conversion_pattern (vec<
> *type_out = vectype1;
> *type_in = vectype1;
> stmts->safe_push (last_stmt);
> - if (dump_enabled_p ())
> - dump_printf_loc (MSG_NOTE, vect_location,
> - "vect_recog_mask_conversion_pattern: detected:\n");
> + vect_pattern_detected ("vect_recog_mask_conversion_pattern", last_stmt);
>
> return pattern_stmt;
> }
> @@ -4092,9 +4037,7 @@ vect_recog_mask_conversion_pattern (vec<
> *type_out = vectype1;
> *type_in = vectype1;
> stmts->safe_push (last_stmt);
> - if (dump_enabled_p ())
> - dump_printf_loc (MSG_NOTE, vect_location,
> - "vect_recog_mask_conversion_pattern: detected:\n");
> + vect_pattern_detected ("vect_recog_mask_conversion_pattern", last_stmt);
>
> return pattern_stmt;
> }
> @@ -4140,9 +4083,7 @@ vect_recog_mask_conversion_pattern (vec<
> *type_out = vectype1;
> *type_in = vectype1;
> stmts->safe_push (last_stmt);
> - if (dump_enabled_p ())
> - dump_printf_loc (MSG_NOTE, vect_location,
> - "vect_recog_mask_conversion_pattern: detected:\n");
> + vect_pattern_detected ("vect_recog_mask_conversion_pattern", last_stmt);
>
> return pattern_stmt;
> }
> @@ -4324,10 +4265,7 @@ vect_try_gather_scatter_pattern (gimple
> tree vectype = STMT_VINFO_VECTYPE (stmt_info);
> *type_out = vectype;
> *type_in = vectype;
> -
> - if (dump_enabled_p ())
> - dump_printf_loc (MSG_NOTE, vect_location,
> - "gather/scatter pattern detected:\n");
> + vect_pattern_detected ("gather/scatter pattern", stmt);
>
> return pattern_stmt;
> }