On Mon, Jun 18, 2018 at 5:00 PM Richard Sandiford
<richard.sandif...@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.sandif...@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;
>  }

Reply via email to