/* Instruction scheduling pass. Log dumping infrastructure.
- Copyright (C) 2006, 2007, 2008 Free Software Foundation, Inc.
+ Copyright (C) 2006, 2007, 2008, 2010 Free Software Foundation, Inc.
This file is part of GCC.
#include "system.h"
#include "coretypes.h"
#include "tm.h"
-#include "toplev.h"
+#include "diagnostic-core.h"
#include "rtl.h"
#include "tm_p.h"
#include "hard-reg-set.h"
/* Dump INSN to stderr. */
-void
+DEBUG_FUNCTION void
debug_insn_rtx (rtx insn)
{
switch_dump (stderr);
}
/* Dump vinsn VI to stderr. */
-void
+DEBUG_FUNCTION void
debug_vinsn (vinsn_t vi)
{
switch_dump (stderr);
}
/* Dump expression EXPR to stderr. */
-void
+DEBUG_FUNCTION void
debug_expr (expr_t expr)
{
switch_dump (stderr);
}
/* Dump INSN to stderr. */
-void
+DEBUG_FUNCTION void
debug_insn (insn_t insn)
{
switch_dump (stderr);
{
sel_print ("{");
- /* This code was adapted from flow.c: dump_regset (). */
+ /* This code was adapted from cfg.c: dump_regset (). */
if (lv == NULL)
sel_print ("nil");
else
int i;
rtx succ;
- for (i = 0; VEC_iterate (rtx, succs, i, succ); i++)
+ FOR_EACH_VEC_ELT (rtx, succs, i, succ)
if (succ)
dump_insn (succ);
else
}
/* Replace characters in BUF that have special meaning in .dot file. */
-void
+static void
sel_prepare_string_for_dot_label (char *buf)
{
static char specials_from[7][2] = { "<", ">", "{", "|", "}", "\"",
replace_str_in_buf (buf, specials_from[i], specials_to[i]);
}
+/* This function acts like printf but dumps to the sched_dump file. */
+void
+sel_print (const char *fmt, ...)
+{
+ va_list ap;
+ va_start (ap, fmt);
+ if (sched_dump_to_dot_p)
+ {
+ char *message;
+ if (vasprintf (&message, fmt, ap) >= 0 && message != NULL)
+ {
+ message = (char *) xrealloc (message, 2 * strlen (message) + 1);
+ sel_prepare_string_for_dot_label (message);
+ fprintf (sched_dump, "%s", message);
+ free (message);
+ }
+ }
+ else
+ vfprintf (sched_dump, fmt, ap);
+ va_end (ap);
+}
+
/* Dump INSN with FLAGS. */
static void
sel_dump_cfg_insn (insn_t insn, int flags)
}
\f
/* Dumps av_set AV to stderr. */
-void
+DEBUG_FUNCTION void
debug_av_set (av_set_t av)
{
switch_dump (stderr);
}
/* Dump LV to stderr. */
-void
+DEBUG_FUNCTION void
debug_lv_set (regset lv)
{
switch_dump (stderr);
}
/* Dump an instruction list P to stderr. */
-void
+DEBUG_FUNCTION void
debug_ilist (ilist_t p)
{
switch_dump (stderr);
}
/* Dump a boundary list BNDS to stderr. */
-void
+DEBUG_FUNCTION void
debug_blist (blist_t bnds)
{
switch_dump (stderr);
}
/* Dump an insn vector SUCCS. */
-void
+DEBUG_FUNCTION void
debug_insn_vector (rtx_vec_t succs)
{
switch_dump (stderr);
}
/* Dump a hard reg set SET to stderr. */
-void
+DEBUG_FUNCTION void
debug_hard_reg_set (HARD_REG_SET set)
{
switch_dump (stderr);
}
/* Print a current cselib value for X's address to stderr. */
-rtx
+DEBUG_FUNCTION rtx
debug_mem_addr_value (rtx x)
{
rtx t, addr;
address_mode = targetm.addr_space.address_mode (MEM_ADDR_SPACE (x));
t = shallow_copy_rtx (x);
- if (cselib_lookup (XEXP (t, 0), address_mode, 0))
- XEXP (t, 0) = cselib_subst_to_values (XEXP (t, 0));
+ if (cselib_lookup (XEXP (t, 0), address_mode, 0, GET_MODE (t)))
+ XEXP (t, 0) = cselib_subst_to_values (XEXP (t, 0), GET_MODE (t));
t = canon_rtx (t);
addr = get_addr (XEXP (t, 0));