Hi, In this patch, loop alignment peeling and loop versioning
transformation will be reported via -fopt-info by default. This will
help vectorizer size tuning.
It also enhances the opt-info dump to include current function name as
context. Otherwise, we may see duplicate messeages from inline/cloned
instances.
An example opt report:
b.c:16:A::foo: note: Loop is vectorized
b.c:16:A::foo: note: Loop is versioned to remove aliases for vectorization
b.c:16:A::foo: note: Loop is peeled to enhance alignment for vectorization
b.c:16:A::foo: note: Completely unroll loop 6 times
b.c:12:A::foo: note: Completely unroll loop 6 times
Ok after testing?
thanks,
David
Index: tree-vectorizer.c
===================================================================
--- tree-vectorizer.c (revision 201751)
+++ tree-vectorizer.c (working copy)
@@ -119,7 +119,7 @@ vectorize_loops (void)
if (LOCATION_LOCUS (vect_location) != UNKNOWN_LOC
&& dump_enabled_p ())
dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, vect_location,
- "Vectorized loop\n");
+ "Loop is vectorized\n");
vect_transform_loop (loop_vinfo);
num_vectorized_loops++;
}
@@ -180,7 +180,7 @@ execute_vect_slp (void)
vect_slp_transform_bb (bb);
if (dump_enabled_p ())
dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, vect_location,
- "Vectorized basic-block\n");
+ "Basic block is vectorized\n");
}
}
Index: tree-vect-loop-manip.c
===================================================================
--- tree-vect-loop-manip.c (revision 201751)
+++ tree-vect-loop-manip.c (working copy)
@@ -2021,8 +2021,9 @@ vect_do_peeling_for_alignment (loop_vec_
int bound = 0;
if (dump_enabled_p ())
- dump_printf_loc (MSG_NOTE, vect_location,
- "=== vect_do_peeling_for_alignment ===");
+ dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, vect_location,
+ "Loop is peeled to enhance"
+ " alignment for vectorization\n");
initialize_original_copy_tables ();
@@ -2404,6 +2405,8 @@ vect_loop_versioning (loop_vec_info loop
unsigned prob = 4 * REG_BR_PROB_BASE / 5;
gimple_seq gimplify_stmt_list = NULL;
tree scalar_loop_iters = LOOP_VINFO_NITERS (loop_vinfo);
+ bool version_align = LOOP_REQUIRES_VERSIONING_FOR_ALIGNMENT (loop_vinfo);
+ bool version_alias = LOOP_REQUIRES_VERSIONING_FOR_ALIAS (loop_vinfo);
if (check_profitability)
{
@@ -2413,11 +2416,11 @@ vect_loop_versioning (loop_vec_info loop
is_gimple_condexpr, NULL_TREE);
}
- if (LOOP_REQUIRES_VERSIONING_FOR_ALIGNMENT (loop_vinfo))
+ if (version_align)
vect_create_cond_for_align_checks (loop_vinfo, &cond_expr,
&cond_expr_stmt_list);
- if (LOOP_REQUIRES_VERSIONING_FOR_ALIAS (loop_vinfo))
+ if (version_alias)
vect_create_cond_for_alias_checks (loop_vinfo, &cond_expr);
cond_expr = force_gimple_operand_1 (cond_expr, &gimplify_stmt_list,
@@ -2427,6 +2430,17 @@ vect_loop_versioning (loop_vec_info loop
initialize_original_copy_tables ();
loop_version (loop, cond_expr, &condition_bb,
prob, prob, REG_BR_PROB_BASE - prob, true);
+
+ if (LOCATION_LOCUS (vect_location) != UNKNOWN_LOC
+ && dump_enabled_p ())
+ {
+ dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, vect_location,
+ "Loop is versioned to %s for vectorization\n",
+ (version_align && version_alias)
+ ? "enhance alignment and remove aliases"
+ : (version_align
+ ? "enhance alignment" : "remove aliases"));
+ }
free_original_copy_tables();
/* Loop versioning violates an assumption we try to maintain during
Index: dumpfile.c
===================================================================
--- dumpfile.c (revision 201751)
+++ dumpfile.c (working copy)
@@ -24,6 +24,7 @@ along with GCC; see the file COPYING3.
#include "dumpfile.h"
#include "gimple-pretty-print.h"
#include "tree.h"
+#include "gimple.h"
/* If non-NULL, return one past-the-end of the matching SUBPART of
the WHOLE string. */
@@ -261,12 +262,20 @@ dump_loc (int dump_kind, FILE *dfile, so
if (dump_kind)
{
if (LOCATION_LOCUS (loc) > BUILTINS_LOCATION)
- fprintf (dfile, "\n%s:%d: note: ", LOCATION_FILE (loc),
- LOCATION_LINE (loc));
+ {
+ if (current_function_decl)
+ fprintf (dfile, "\n%s:%d:%s: note: ", LOCATION_FILE (loc),
+ LOCATION_LINE (loc),
+ gimple_decl_printable_name (current_function_decl, 1));
+ else
+ fprintf (dfile, "\n%s:%d: note: ", LOCATION_FILE (loc),
+ LOCATION_LINE (loc));
+ }
else if (current_function_decl)
- fprintf (dfile, "\n%s:%d: note: ",
+ fprintf (dfile, "\n%s:%d:%s: note: ",
DECL_SOURCE_FILE (current_function_decl),
- DECL_SOURCE_LINE (current_function_decl));
+ DECL_SOURCE_LINE (current_function_decl),
+ gimple_decl_printable_name (current_function_decl, 1));
}
}
Index: ChangeLog
===================================================================
--- ChangeLog (revision 201752)
+++ ChangeLog (working copy)
@@ -1,3 +1,13 @@
+2013-08-22 Xinliang David Li <[email protected]>
+
+ * tree-vect-loop-manip.c (vect_do_peeling_for_alignment):
+ Emit alignment peeling message with default -fopt-info.
+ (vect_loop_versioning): Emit loop version info message.
+ * tree-vectorizer.c (vectorize_loops): Minor message
+ change.
+ (execute_vect_slp): Ditto.
+ * dumpfile.c (dump_loc): Add function name in the dump.
+
2013-08-14 Xinliang David Li <[email protected]>
* config/i386/i386.c (ix86_option_override_internal):