dumpfile.c: add indentation via DUMP_VECT_SCOPE
This patch adds a concept of nested "scopes" to dumpfile.c's dump_*_loc calls, and wires it up to the DUMP_VECT_SCOPE macro in tree-vectorizer.h, so that the nested structure is shown in -fopt-info by indentation. For example, this converts -fopt-info-all e.g. from: test.c:8:3: note: === analyzing loop === test.c:8:3: note: === analyze_loop_nest === test.c:8:3: note: === vect_analyze_loop_form === test.c:8:3: note: === get_loop_niters === test.c:8:3: note: symbolic number of iterations is (unsigned int) n_9(D) test.c:8:3: note: not vectorized: loop contains function calls or data references that cannot be analyzed test.c:8:3: note: vectorized 0 loops in function to: test.c:8:3: note: === analyzing loop === test.c:8:3: note: === analyze_loop_nest === test.c:8:3: note: === vect_analyze_loop_form === test.c:8:3: note: === get_loop_niters === test.c:8:3: note: symbolic number of iterations is (unsigned int) n_9(D) test.c:8:3: note: not vectorized: loop contains function calls or data references that cannot be analyzed test.c:8:3: note: vectorized 0 loops in function showing that the "symbolic number of iterations" message is within the "=== analyze_loop_nest ===" (and not within the "=== vect_analyze_loop_form ==="). This is also enabling work for followups involving optimization records (allowing the records to directly capture the nested structure of the dump messages). gcc/ChangeLog: * dumpfile.c (dump_loc): Add indentation based on scope depth. (dump_scope_depth): New variable. (get_dump_scope_depth): New function. (dump_begin_scope): New function. (dump_end_scope): New function. * dumpfile.h (get_dump_scope_depth): New declaration. (dump_begin_scope): New declaration. (dump_end_scope): New declaration. (class auto_dump_scope): New class. (AUTO_DUMP_SCOPE): New macro. * tree-vectorizer.h (DUMP_VECT_SCOPE): Reimplement in terms of AUTO_DUMP_SCOPE. From-SVN: r262246
This commit is contained in:
parent
6fdce073fc
commit
6475e077a0
4 changed files with 97 additions and 7 deletions
|
@ -1,3 +1,18 @@
|
|||
2018-06-29 David Malcolm <dmalcolm@redhat.com>
|
||||
|
||||
* dumpfile.c (dump_loc): Add indentation based on scope depth.
|
||||
(dump_scope_depth): New variable.
|
||||
(get_dump_scope_depth): New function.
|
||||
(dump_begin_scope): New function.
|
||||
(dump_end_scope): New function.
|
||||
* dumpfile.h (get_dump_scope_depth): New declaration.
|
||||
(dump_begin_scope): New declaration.
|
||||
(dump_end_scope): New declaration.
|
||||
(class auto_dump_scope): New class.
|
||||
(AUTO_DUMP_SCOPE): New macro.
|
||||
* tree-vectorizer.h (DUMP_VECT_SCOPE): Reimplement in terms of
|
||||
AUTO_DUMP_SCOPE.
|
||||
|
||||
2018-06-29 Richard Biener <rguenther@suse.de>
|
||||
|
||||
* tree-vect-data-refs.c (vect_analyze_data_ref_dependences): Assert
|
||||
|
|
|
@ -453,6 +453,8 @@ dump_loc (dump_flags_t dump_kind, FILE *dfile, source_location loc)
|
|||
DECL_SOURCE_FILE (current_function_decl),
|
||||
DECL_SOURCE_LINE (current_function_decl),
|
||||
DECL_SOURCE_COLUMN (current_function_decl));
|
||||
/* Indentation based on scope depth. */
|
||||
fprintf (dfile, "%*s", get_dump_scope_depth (), "");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -573,6 +575,39 @@ template void dump_dec (dump_flags_t, const poly_uint64 &);
|
|||
template void dump_dec (dump_flags_t, const poly_offset_int &);
|
||||
template void dump_dec (dump_flags_t, const poly_widest_int &);
|
||||
|
||||
/* The current dump scope-nesting depth. */
|
||||
|
||||
static int dump_scope_depth;
|
||||
|
||||
/* Get the current dump scope-nesting depth.
|
||||
For use by dump_*_loc (for showing nesting via indentation). */
|
||||
|
||||
unsigned int
|
||||
get_dump_scope_depth ()
|
||||
{
|
||||
return dump_scope_depth;
|
||||
}
|
||||
|
||||
/* Push a nested dump scope.
|
||||
Print "=== NAME ===\n" to the dumpfile, if any, and to the -fopt-info
|
||||
destination, if any.
|
||||
Increment the scope depth. */
|
||||
|
||||
void
|
||||
dump_begin_scope (const char *name, const dump_location_t &loc)
|
||||
{
|
||||
dump_printf_loc (MSG_NOTE, loc, "=== %s ===\n", name);
|
||||
dump_scope_depth++;
|
||||
}
|
||||
|
||||
/* Pop a nested dump scope. */
|
||||
|
||||
void
|
||||
dump_end_scope ()
|
||||
{
|
||||
dump_scope_depth--;
|
||||
}
|
||||
|
||||
/* Start a dump for PHASE. Store user-supplied dump flags in
|
||||
*FLAG_PTR. Return the number of streams opened. Set globals
|
||||
DUMP_FILE, and ALT_DUMP_FILE to point to the opened streams, and
|
||||
|
|
|
@ -459,6 +459,45 @@ dump_enabled_p (void)
|
|||
return dumps_are_enabled;
|
||||
}
|
||||
|
||||
/* Managing nested scopes, so that dumps can express the call chain
|
||||
leading to a dump message. */
|
||||
|
||||
extern unsigned int get_dump_scope_depth ();
|
||||
extern void dump_begin_scope (const char *name, const dump_location_t &loc);
|
||||
extern void dump_end_scope ();
|
||||
|
||||
/* Implementation detail of the AUTO_DUMP_SCOPE macro below.
|
||||
|
||||
A RAII-style class intended to make it easy to emit dump
|
||||
information about entering and exiting a collection of nested
|
||||
function calls. */
|
||||
|
||||
class auto_dump_scope
|
||||
{
|
||||
public:
|
||||
auto_dump_scope (const char *name, dump_location_t loc)
|
||||
{
|
||||
if (dump_enabled_p ())
|
||||
dump_begin_scope (name, loc);
|
||||
}
|
||||
~auto_dump_scope ()
|
||||
{
|
||||
if (dump_enabled_p ())
|
||||
dump_end_scope ();
|
||||
}
|
||||
};
|
||||
|
||||
/* A macro for calling:
|
||||
dump_begin_scope (NAME, LOC);
|
||||
via an RAII object, thus printing "=== MSG ===\n" to the dumpfile etc,
|
||||
and then calling
|
||||
dump_end_scope ();
|
||||
once the object goes out of scope, thus capturing the nesting of
|
||||
the scopes. */
|
||||
|
||||
#define AUTO_DUMP_SCOPE(NAME, LOC) \
|
||||
auto_dump_scope scope (NAME, LOC)
|
||||
|
||||
namespace gcc {
|
||||
|
||||
class dump_manager
|
||||
|
|
|
@ -1440,15 +1440,16 @@ vect_get_scalar_dr_size (struct data_reference *dr)
|
|||
/* Source location + hotness information. */
|
||||
extern dump_user_location_t vect_location;
|
||||
|
||||
/* If dumping is enabled, emit a MSG_NOTE at vect_location about
|
||||
entering MSG within the vectorizer. MSG should be a string literal. */
|
||||
/* A macro for calling:
|
||||
dump_begin_scope (MSG, vect_location);
|
||||
via an RAII object, thus printing "=== MSG ===\n" to the dumpfile etc,
|
||||
and then calling
|
||||
dump_end_scope ();
|
||||
once the object goes out of scope, thus capturing the nesting of
|
||||
the scopes. */
|
||||
|
||||
#define DUMP_VECT_SCOPE(MSG) \
|
||||
do { \
|
||||
if (dump_enabled_p ()) \
|
||||
dump_printf_loc (MSG_NOTE, vect_location, \
|
||||
"=== " MSG " ===\n"); \
|
||||
} while (0)
|
||||
AUTO_DUMP_SCOPE (MSG, vect_location)
|
||||
|
||||
/*-----------------------------------------------------------------*/
|
||||
/* Function prototypes. */
|
||||
|
|
Loading…
Add table
Reference in a new issue