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] | |
Following PR18441
Here is a patch for making the dump information more flexible and user
friendly.
This patch enables the following dump information scheme:
The user can choose between 6 verbosity levels using the flag
-ftree-vectorizer-verbose=<number>:
Level 0: No output at all.
Level 1: Report vectorized loops.
Level 2: Also report unvectorized "well-formed" loops and respective
reason.
Level 3: Also report alignment information (for "well-formed" loops).
Level 4: Like level 3 + report for non-well-formed inner-loops.
Level 5: Like level 3 + report for all loops.
Level 6: Print all vectorizer dump information (equivalent to former
vect-debug-details).
Where "well formed" loops are inner-most loops that comply with several
restrictions (loops that pass the first analysis pass - analyze_loop_form
- successfully).
The information is printed to the standard error unless -fdump-tree-vect
or -fdump-tree-all are set.
Here is an example of the new output scheme:
1. > gcc -O2 -ftree-vectorize -maltivec -ftree-vectorizer-verbose=0 -S
vect-70.c
<Empty output>
2. > gcc -O2 -ftree-vectorize -maltivec -ftree-vectorizer-verbose=1 -S
vect-70.c
loop at vect-70.c:26: LOOP VECTORIZED.
vectorized 1 loops in function.
3. > gcc -O2 -ftree-vectorize -maltivec -ftree-vectorizer-verbose=2 -S
vect-70.c
loop at vect-70.c:26: LOOP VECTORIZED.
loop at vect-70.c:41: not vectorized: complicated access pattern.
vectorized 1 loops in function.
4. > gcc -O2 -ftree-vectorize -maltivec -ftree-vectorizer-verbose=3 -S
vect-70.c
loop at vect-70.c:26: Alignment of access forced using peeling.
loop at vect-70.c:26: LOOP VECTORIZED.
loop at vect-70.c:41: not vectorized: complicated access pattern.
vectorized 1 loops in function.
5. > gcc -O2 -ftree-vectorize -maltivec -ftree-vectorizer-verbose=4 -S
vect-70.c
loop at vect-70.c:26: Alignment of access forced using peeling.
loop at vect-70.c:26: LOOP VECTORIZED.
loop at vect-70.c:35: not vectorized: multiple exits.
loop at vect-70.c:41: not vectorized: complicated access pattern.
loop at vect-70.c:50: not vectorized: multiple exits.
vectorized 1 loops in function.
6. > gcc -O2 -ftree-vectorize -maltivec -ftree-vectorizer-verbose=5 -S
loop at vect-70.c:25: not vectorized: nested loop.
loop at vect-70.c:26: Alignment of access forced using peeling.
loop at vect-70.c:26: LOOP VECTORIZED.
not vectorized: nested loop.
loop at vect-70.c:35: not vectorized: multiple exits.
loop at vect-70.c:40: not vectorized: nested loop.
loop at vect-70.c:41: not vectorized: complicated access pattern.
not vectorized: nested loop.
loop at vect-70.c:50: not vectorized: multiple exits.
vectorized 1 loops in function.
This patch consists of:
1. Two new functions for setting the verbosity level of the vectorizer
according to the above scheme: vect_set_dump_settings and
vect_set_verbosity_level.
2. New function vect_print_dump_info replaces the functions
vect_debug_stats and vect_debug_details.
3. The rest is a technical replacement of all calls to
vect_debug_details/stats with calls to vect_print_dump_info with
appropriate verbosity level.
4. Minor cleanups to the dump information.
The patch depends on the patch for improving loop location reports (parts
1 and 2):
http://gcc.gnu.org/ml/gcc-patches/2005-01/msg00664.html
http://gcc.gnu.org/ml/gcc-patches/2005-01/msg00665.html
Reviewed by Dorit. Bootstrapped and tested on powerpc-suse-linux.
ok for mainline?
Thanks,
Leehod
ChangeLog:
* testsuite/gcc.dg/vect/vect.exp: Add -ftree-vectorizer-verbose=3.
* doc/invoke.texi (ftree-vectorizer-verbose): New.
* opts.c (OPT_ftree_vectorizer_verbose_): New case for switch.
* common.opt (ftree-vectorizer-verbose): New Flag for the
vectorizer
was added.
* tree.h (vect_set_verbosity_level): New extern function
declaration
added.
* tree-vectorizer.h (verbosity_levels): New enum type.
* tree-vectorizer.c (vect_debug_stats): Function removed.
(vect_debug_details): Likewise.
(vect_verbosity_level): Global variable was defined and
initialized.
(vect_dump): Global variable definition.
(vect_print_dump_info): New function.
(vect_set_dump_settings): New function.
(vect_set_verbosity_level): New function.
(vectorize_loops): Add call to vect_set_dump_settings.
(slpeel_make_loop_iterate_ntimes): Dump condition was changed.
(slpeel_tree_duplicate_loop_to_edge_cfg): Likewise.
(slpeel_tree_peel_loop_to_edge): Likewise.
(vect_analyze_offset_expr): Call to vect_print_dump_info with
appropriate verbosity level instead of call to vect_debug_details
or vect_debug_stats.
(vect_get_base_and_offset):
(vect_create_addr_base_for_vector_ref):
(get_vectype_for_scalar_type):
(vect_create_data_ref_ptr):
(vect_init_vector):
(vect_get_vec_def_for_operand):
(vect_finish_stmt_generation):
(vectorizable_assignment):
(vectorizable_operation):
(vectorizable_store):
(vectorizable_load):
(vect_transform_stmt):
(vect_update_ivs_after_vectorizer):
(vect_do_peeling_for_loop_bound):
(vect_update_inits_of_drs):
(vect_do_peeling_for_alignment):
(vect_transform_loop):
(vect_is_simple_use):
(vect_analyze_operations):
(vect_is_simple_iv_evolution):
(vect_analyze_scalar_cycles):
(vect_analyze_data_ref_dependence):
(vect_analyze_data_ref_dependences):
(vect_compute_data_ref_alignment):
(vect_enhance_data_refs_alignment):
(vect_analyze_data_refs_alignment):
(vect_analyze_data_ref_access):
(vect_analyze_data_ref_accesses):
(vect_analyze_pointer_ref_access):
(vect_get_memtag_and_dr):
(vect_analyze_data_refs):
(vect_mark_relevant):
(vect_stmt_relevant_p):
(vect_mark_stmts_to_be_vectorized):
(vect_can_advance_ivs_p):
(vect_get_loop_niters):
(vect_analyze_loop_form):
(vect_analyze_loop):
(vectorize_loops): Likewise.
(vect_do_peeling_for_loop_bound): Dump format slightly changed.
(vect_update_inits_of_drs):
(vect_do_peeling_for_alignment):
(vect_transform_loop):
(vect_analyze_operations):
(vect_analyze_scalar_cycles):
(vect_analyze_data_ref_dependences):
(vect_analyze_data_refs_alignment):
(vect_analyze_data_ref_accesses):
(vect_analyze_data_refs):
(vect_mark_stmts_to_be_vectorized):
(vect_get_loop_niters):
(vect_analyze_loop_form):
(vect_analyze_loop): Likewise.
(vect_mark_stmts_to_be_vectorized): Add call to
print_generic_expr.
Patch:
Attachment:
verbosity_levels.patch
Description: Binary data
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |