Mercurial > hg > CbC > CbC_gcc
diff gcc/sel-sched-dump.c @ 111:04ced10e8804
gcc 7
author | kono |
---|---|
date | Fri, 27 Oct 2017 22:46:09 +0900 |
parents | f6334be47118 |
children | 84e7813d76e9 |
line wrap: on
line diff
--- a/gcc/sel-sched-dump.c Sun Aug 21 07:07:55 2011 +0900 +++ b/gcc/sel-sched-dump.c Fri Oct 27 22:46:09 2017 +0900 @@ -1,5 +1,5 @@ /* Instruction scheduling pass. Log dumping infrastructure. - Copyright (C) 2006, 2007, 2008, 2010 Free Software Foundation, Inc. + Copyright (C) 2006-2017 Free Software Foundation, Inc. This file is part of GCC. @@ -20,25 +20,19 @@ #include "config.h" #include "system.h" #include "coretypes.h" -#include "tm.h" -#include "diagnostic-core.h" +#include "backend.h" #include "rtl.h" -#include "tm_p.h" -#include "hard-reg-set.h" -#include "regs.h" -#include "function.h" -#include "flags.h" -#include "insn-config.h" +#include "df.h" #include "insn-attr.h" -#include "params.h" -#include "output.h" -#include "basic-block.h" #include "cselib.h" -#include "target.h" #ifdef INSN_SCHEDULING +#include "regset.h" +#include "sched-int.h" +#include "cfgloop.h" #include "sel-sched-ir.h" #include "sel-sched-dump.h" +#include "print-rtl.h" /* These variables control high-level pretty printing. */ @@ -92,7 +86,7 @@ /* Functions for dumping instructions, av sets, and exprs. */ /* Default flags for dumping insns. */ -static int dump_insn_rtx_flags = DUMP_INSN_RTX_PATTERN; +static int dump_insn_rtx_flags = DUMP_INSN_RTX_UID | DUMP_INSN_RTX_PATTERN; /* Default flags for dumping vinsns. */ static int dump_vinsn_flags = (DUMP_VINSN_INSN_RTX | DUMP_VINSN_TYPE @@ -137,12 +131,7 @@ sel_print ("%d;", INSN_UID (insn)); if (flags & DUMP_INSN_RTX_PATTERN) - { - char buf[2048]; - - print_insn (buf, insn, 0); - sel_print ("%s;", buf); - } + sel_print ("%s;", str_pattern_slim (PATTERN (insn))); if (flags & DUMP_INSN_RTX_BBN) { @@ -213,6 +202,42 @@ dump_vinsn_1 (vi, dump_vinsn_flags); } +DEBUG_FUNCTION void +debug (vinsn_def &ref) +{ + switch_dump (stderr); + dump_vinsn_1 (&ref, dump_vinsn_flags); + sel_print ("\n"); + restore_dump (); +} + +DEBUG_FUNCTION void +debug (vinsn_def *ptr) +{ + if (ptr) + debug (*ptr); + else + fprintf (stderr, "<nil>\n"); +} + +DEBUG_FUNCTION void +debug_verbose (vinsn_def &ref) +{ + switch_dump (stderr); + dump_vinsn_1 (&ref, debug_vinsn_flags); + sel_print ("\n"); + restore_dump (); +} + +DEBUG_FUNCTION void +debug_verbose (vinsn_def *ptr) +{ + if (ptr) + debug (*ptr); + else + fprintf (stderr, "<nil>\n"); +} + /* Dump vinsn VI to stderr. */ DEBUG_FUNCTION void debug_vinsn (vinsn_t vi) @@ -304,6 +329,46 @@ restore_dump (); } +/* Dump expression REF. */ + +DEBUG_FUNCTION void +debug (expr_def &ref) +{ + switch_dump (stderr); + dump_expr_1 (&ref, 0); + sel_print ("\n"); + restore_dump (); +} + +DEBUG_FUNCTION void +debug (expr_def *ptr) +{ + if (ptr) + debug (*ptr); + else + fprintf (stderr, "<nil>\n"); +} + +/* Dump expression REF verbosely. */ + +DEBUG_FUNCTION void +debug_verbose (expr_def &ref) +{ + switch_dump (stderr); + dump_expr_1 (&ref, DUMP_EXPR_ALL); + sel_print ("\n"); + restore_dump (); +} + +DEBUG_FUNCTION void +debug_verbose (expr_def *ptr) +{ + if (ptr) + debug_verbose (*ptr); + else + fprintf (stderr, "<nil>\n"); +} + /* Dump insn I honoring FLAGS. */ void dump_insn_1 (insn_t i, int flags) @@ -464,9 +529,9 @@ dump_insn_vector (rtx_vec_t succs) { int i; - rtx succ; + rtx_insn *succ; - FOR_EACH_VEC_ELT (rtx, succs, i, succ) + FOR_EACH_VEC_ELT (succs, i, succ) if (succ) dump_insn (succ); else @@ -497,13 +562,13 @@ /* Pretty print INSN. This is used as a hook. */ const char * -sel_print_insn (const_rtx insn, int aligned ATTRIBUTE_UNUSED) +sel_print_insn (const rtx_insn *insn, int aligned ATTRIBUTE_UNUSED) { static char buf[80]; /* '+' before insn means it is a new cycle start and it's not been scheduled yet. '>' - has been scheduled. */ - if (s_i_d && INSN_LUID (insn) > 0) + if (s_i_d.exists () && INSN_LUID (insn) > 0) if (GET_MODE (insn) == TImode) sprintf (buf, "%s %4d", INSN_SCHED_TIMES (insn) > 0 ? "> " : "< ", @@ -523,6 +588,7 @@ /* Functions for pretty printing of CFG. */ +/* FIXME: Using pretty-print here could simplify this stuff. */ /* Replace all occurencies of STR1 to STR2 in BUF. The BUF must be large enough to hold the result. */ @@ -565,7 +631,8 @@ while (p); } -/* Replace characters in BUF that have special meaning in .dot file. */ +/* Replace characters in BUF that have special meaning in .dot file. + Similar to pp_write_text_as_dot_label_to_stream. */ static void sel_prepare_string_for_dot_label (char *buf) { @@ -607,7 +674,7 @@ { int insn_flags = DUMP_INSN_UID | DUMP_INSN_PATTERN; - if (sched_luids != NULL && INSN_LUID (insn) > 0) + if (sched_luids.exists () && INSN_LUID (insn) > 0) { if (flags & SEL_DUMP_CFG_INSN_SEQNO) insn_flags |= DUMP_INSN_SEQNO | DUMP_INSN_SCHED_CYCLE | DUMP_INSN_EXPR; @@ -678,7 +745,7 @@ if (flags & SEL_DUMP_CFG_FUNCTION_NAME) fprintf (f, "function [label = \"%s\"];\n", current_function_name ()); - FOR_EACH_BB (bb) + FOR_EACH_BB_FN (bb, cfun) { insn_t insn = BB_HEAD (bb); insn_t next_tail = NEXT_INSN (BB_END (bb)); @@ -922,6 +989,25 @@ 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) @@ -954,10 +1040,10 @@ debug_mem_addr_value (rtx x) { rtx t, addr; - enum machine_mode address_mode; + machine_mode address_mode; gcc_assert (MEM_P (x)); - address_mode = targetm.addr_space.address_mode (MEM_ADDR_SPACE (x)); + address_mode = get_address_mode (x); t = shallow_copy_rtx (x); if (cselib_lookup (XEXP (t, 0), address_mode, 0, GET_MODE (t)))