Commit 19a30b71 by Aldy Hernandez Committed by Aldy Hernandez

vec.h (debug_helper): New function.

	* vec.h (debug_helper): New function.
	(DEFINE_DEBUG_VEC): New macro.
	* hash-set.h (debug_helper): New function.
	(DEFINE_DEBUG_HASH_SET): New macro.
	* cfg.c (debug_slim (edge)): New function.
	Call DEFINE_DEBUG_VEC for edges.
	Call DEFINE_DEBUG_HASH_SET for edges.
	* cfghooks.c (debug_slim (basic_block)): New function.
	Call DEFINE_DEBUG_VEC for basic blocks.
	Call DEFINE_DEBUG_HASH_SET for basic blocks.
	* print-tree.c (debug_slim): New function to handle trees.
	Call DEFINE_DEBUG_VEC for trees.
	Call DEFINE_DEBUG_HASH_SET for trees.
	(debug (vec<tree, va_gc>) &): Remove.
	(debug (<vec<tree, va_gc>) *): Remove.
	* print-rtl.c (debug_slim): New function to handle const_rtx.
	Call DEFINE_DEBUG_VEC for rtx_def.
	Call DEFINE_DEBUG_VEC for rtx_insn.
	Call DEFINE_DEBUG_HASH_SET for rtx_def.
	Call DEFINE_DEBUG_HASH_SET for rtx_insn.
	* sel-sched-dump.c (debug (vec<rtx_insn *> &): Remove.
	(debug (vec<rtx_insn *> *ptr): Remove.
	(debug_insn_vector): Remove.
	* stor-layout.c (debug_rli): Call debug() instead of debug_vec_tree.

From-SVN: r254945
parent 7cfaa4c6
2017-11-20 Aldy Hernandez <aldyh@redhat.com>
* vec.h (debug_helper): New function.
(DEFINE_DEBUG_VEC): New macro.
* hash-set.h (debug_helper): New function.
(DEFINE_DEBUG_HASH_SET): New macro.
* cfg.c (debug_slim (edge)): New function.
Call DEFINE_DEBUG_VEC for edges.
Call DEFINE_DEBUG_HASH_SET for edges.
* cfghooks.c (debug_slim (basic_block)): New function.
Call DEFINE_DEBUG_VEC for basic blocks.
Call DEFINE_DEBUG_HASH_SET for basic blocks.
* print-tree.c (debug_slim): New function to handle trees.
Call DEFINE_DEBUG_VEC for trees.
Call DEFINE_DEBUG_HASH_SET for trees.
(debug (vec<tree, va_gc>) &): Remove.
(debug (<vec<tree, va_gc>) *): Remove.
* print-rtl.c (debug_slim): New function to handle const_rtx.
Call DEFINE_DEBUG_VEC for rtx_def.
Call DEFINE_DEBUG_VEC for rtx_insn.
Call DEFINE_DEBUG_HASH_SET for rtx_def.
Call DEFINE_DEBUG_HASH_SET for rtx_insn.
* sel-sched-dump.c (debug (vec<rtx_insn *> &): Remove.
(debug (vec<rtx_insn *> *ptr): Remove.
(debug_insn_vector): Remove.
* stor-layout.c (debug_rli): Call debug() instead of debug_vec_tree.
2017-11-20 Tom de Vries <tom@codesourcery.com>
PR rtl-optimization/82020
......@@ -553,6 +553,16 @@ debug (edge_def *ptr)
else
fprintf (stderr, "<nil>\n");
}
static void
debug_slim (edge e)
{
fprintf (stderr, "<edge 0x%p (%d -> %d)>", (void *) e,
e->src->index, e->dest->index);
}
DEFINE_DEBUG_VEC (edge)
DEFINE_DEBUG_HASH_SET (edge)
/* Simple routines to easily allocate AUX fields of basic blocks. */
......
......@@ -300,6 +300,14 @@ debug (basic_block_def *ptr)
fprintf (stderr, "<nil>\n");
}
static void
debug_slim (basic_block ptr)
{
fprintf (stderr, "<basic_block %p (%d)>", (void *) ptr, ptr->index);
}
DEFINE_DEBUG_VEC (basic_block_def *)
DEFINE_DEBUG_HASH_SET (basic_block_def *)
/* Dumps basic block BB to pretty-printer PP, for use as a label of
a DOT graph record-node. The implementation of this hook is
......
......@@ -127,6 +127,44 @@ private:
hash_table<Traits> m_table;
};
/* Generic hash_set<TYPE> debug helper.
This needs to be instantiated for each hash_set<TYPE> used throughout
the compiler like this:
DEFINE_DEBUG_HASH_SET (TYPE)
The reason we have a debug_helper() is because GDB can't
disambiguate a plain call to debug(some_hash), and it must be called
like debug<TYPE>(some_hash). */
template<typename T>
void
debug_helper (hash_set<T> &ref)
{
for (typename hash_set<T>::iterator it = ref.begin ();
it != ref.end (); ++it)
{
debug_slim (*it);
fputc ('\n', stderr);
}
}
#define DEFINE_DEBUG_HASH_SET(T) \
template static void debug_helper (hash_set<T> &); \
DEBUG_FUNCTION void \
debug (hash_set<T> &ref) \
{ \
debug_helper <T> (ref); \
} \
DEBUG_FUNCTION void \
debug (hash_set<T> *ptr) \
{ \
if (ptr) \
debug (*ptr); \
else \
fprintf (stderr, "<nil>\n"); \
}
/* ggc marking routines. */
template<typename K, typename H>
......
......@@ -967,6 +967,23 @@ debug (const rtx_def *ptr)
fprintf (stderr, "<nil>\n");
}
/* Like debug_rtx but with no newline, as debug_helper will add one.
Note: No debug_slim(rtx_insn *) variant implemented, as this
function can serve for both rtx and rtx_insn. */
static void
debug_slim (const_rtx x)
{
rtx_writer w (stderr, 0, false, false, NULL);
w.print_rtx (x);
}
DEFINE_DEBUG_VEC (rtx_def *)
DEFINE_DEBUG_VEC (rtx_insn *)
DEFINE_DEBUG_HASH_SET (rtx_def *)
DEFINE_DEBUG_HASH_SET (rtx_insn *)
/* Count of rtx's to print with debug_rtx_list.
This global exists because gdb user defined commands have no arguments. */
......
......@@ -1095,32 +1095,6 @@ debug_raw (vec<tree, va_gc> &ref)
}
DEBUG_FUNCTION void
debug (vec<tree, va_gc> &ref)
{
tree elt;
unsigned ix;
/* Print the slot this node is in, and its code, and address. */
fprintf (stderr, "<VEC");
dump_addr (stderr, " ", ref.address ());
FOR_EACH_VEC_ELT (ref, ix, elt)
{
fprintf (stderr, "elt:%d ", ix);
debug (elt);
}
}
DEBUG_FUNCTION void
debug (vec<tree, va_gc> *ptr)
{
if (ptr)
debug (*ptr);
else
fprintf (stderr, "<nil>\n");
}
DEBUG_FUNCTION void
debug_raw (vec<tree, va_gc> *ptr)
{
if (ptr)
......@@ -1129,8 +1103,11 @@ debug_raw (vec<tree, va_gc> *ptr)
fprintf (stderr, "<nil>\n");
}
DEBUG_FUNCTION void
debug_vec_tree (vec<tree, va_gc> *vec)
static void
debug_slim (tree t)
{
debug_raw (vec);
print_node_brief (stderr, "", t, 0);
}
DEFINE_DEBUG_VEC (tree)
DEFINE_DEBUG_HASH_SET (tree)
......@@ -989,35 +989,6 @@ debug_blist (blist_t bnds)
restore_dump ();
}
/* Dump a rtx vector REF. */
DEBUG_FUNCTION void
debug (vec<rtx_insn *> &ref)
{
switch_dump (stderr);
dump_insn_vector (ref);
sel_print ("\n");
restore_dump ();
}
DEBUG_FUNCTION void
debug (vec<rtx_insn *> *ptr)
{
if (ptr)
debug (*ptr);
else
fprintf (stderr, "<nil>\n");
}
/* Dump an insn vector SUCCS. */
DEBUG_FUNCTION void
debug_insn_vector (rtx_vec_t succs)
{
switch_dump (stderr);
dump_insn_vector (succs);
sel_print ("\n");
restore_dump ();
}
/* Dump a hard reg set SET to stderr. */
DEBUG_FUNCTION void
debug_hard_reg_set (HARD_REG_SET set)
......
......@@ -942,7 +942,7 @@ debug_rli (record_layout_info rli)
if (!vec_safe_is_empty (rli->pending_statics))
{
fprintf (stderr, "pending statics:\n");
debug_vec_tree (rli->pending_statics);
debug (rli->pending_statics);
}
}
......
......@@ -407,6 +407,83 @@ struct GTY((user)) vec
{
};
/* Generic vec<> debug helpers.
These need to be instantiated for each vec<TYPE> used throughout
the compiler like this:
DEFINE_DEBUG_VEC (TYPE)
The reason we have a debug_helper() is because GDB can't
disambiguate a plain call to debug(some_vec), and it must be called
like debug<TYPE>(some_vec). */
template<typename T>
void
debug_helper (vec<T> &ref)
{
unsigned i;
for (i = 0; i < ref.length (); ++i)
{
fprintf (stderr, "[%d] = ", i);
debug_slim (ref[i]);
fputc ('\n', stderr);
}
}
/* We need a separate va_gc variant here because default template
argument for functions cannot be used in c++-98. Once this
restriction is removed, those variant should be folded with the
above debug_helper. */
template<typename T>
void
debug_helper (vec<T, va_gc> &ref)
{
unsigned i;
for (i = 0; i < ref.length (); ++i)
{
fprintf (stderr, "[%d] = ", i);
debug_slim (ref[i]);
fputc ('\n', stderr);
}
}
/* Macro to define debug(vec<T>) and debug(vec<T, va_gc>) helper
functions for a type T. */
#define DEFINE_DEBUG_VEC(T) \
template static void debug_helper (vec<T> &); \
template static void debug_helper (vec<T, va_gc> &); \
/* Define the vec<T> debug functions. */ \
DEBUG_FUNCTION void \
debug (vec<T> &ref) \
{ \
debug_helper <T> (ref); \
} \
DEBUG_FUNCTION void \
debug (vec<T> *ptr) \
{ \
if (ptr) \
debug (*ptr); \
else \
fprintf (stderr, "<nil>\n"); \
} \
/* Define the vec<T, va_gc> debug functions. */ \
DEBUG_FUNCTION void \
debug (vec<T, va_gc> &ref) \
{ \
debug_helper <T> (ref); \
} \
DEBUG_FUNCTION void \
debug (vec<T, va_gc> *ptr) \
{ \
if (ptr) \
debug (*ptr); \
else \
fprintf (stderr, "<nil>\n"); \
}
/* Default-construct N elements in DST. */
template <typename T>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment