diff mbox series

[7/n] PR85694: Add a vect_pattern_detected helper

Message ID 87sh5kf8d0.fsf@arm.com
State New
Headers show
Series [7/n] PR85694: Add a vect_pattern_detected helper | expand

Commit Message

Richard Sandiford June 18, 2018, 2:59 p.m. UTC
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?

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.

Comments

Richard Biener June 19, 2018, 10 a.m. UTC | #1
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;
>  }
diff mbox series

Patch

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;
 }