From 04ca77c89968f390616f0d80064c30b675149c35 Mon Sep 17 00:00:00 2001 From: zack Date: Thu, 17 Feb 2000 04:16:40 +0000 Subject: [PATCH] * flow.c (dump_regset, debug_regset, dump_bb, debug_bb, debug_bb_n): New functions. (dump_flow_info, print_rtl_with_bb): Use dump_regset. * basic-block.h: Prototype new functions. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@32024 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 7 ++++ gcc/basic-block.h | 5 +++ gcc/flow.c | 111 ++++++++++++++++++++++++++++++++++++++++++------------ 3 files changed, 98 insertions(+), 25 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a843bcc95de..59937309f97 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2000-02-16 Zack Weinberg + + * flow.c (dump_regset, debug_regset, dump_bb, debug_bb, + debug_bb_n): New functions. + (dump_flow_info, print_rtl_with_bb): Use dump_regset. + * basic-block.h: Prototype new functions. + Wed Feb 16 21:07:53 2000 Denis Chertykov * invoke.texi: Add AVR invocation docs. diff --git a/gcc/basic-block.h b/gcc/basic-block.h index b83e0f4c458..50cc28e0dc1 100644 --- a/gcc/basic-block.h +++ b/gcc/basic-block.h @@ -446,6 +446,11 @@ extern void estimate_probability PARAMS ((struct loops *)); /* In flow.c */ extern void reorder_basic_blocks PARAMS ((void)); +extern void dump_bb PARAMS ((basic_block, FILE *)); +extern void debug_bb PARAMS ((basic_block)); +extern void debug_bb_n PARAMS ((int)); +extern void dump_regset PARAMS ((regset, FILE *)); +extern void debug_regset PARAMS ((regset)); #endif /* _BASIC_BLOCK_H */ diff --git a/gcc/flow.c b/gcc/flow.c index 6c4c9534814..b56fd981d77 100644 --- a/gcc/flow.c +++ b/gcc/flow.c @@ -4866,6 +4866,35 @@ find_use_as_address (x, reg, plusconst) This is part of making a debugging dump. */ void +dump_regset (r, outf) + regset r; + FILE *outf; +{ + int i; + if (r == NULL) + { + fputs (" (nil)", outf); + return; + } + + EXECUTE_IF_SET_IN_REG_SET (r, 0, i, + { + fprintf (outf, " %d", i); + if (i < FIRST_PSEUDO_REGISTER) + fprintf (outf, " [%s]", + reg_names[i]); + }); +} + +void +debug_regset (r) + regset r; +{ + dump_regset (r, stderr); + putc ('\n', stderr); +} + +void dump_flow_info (file) FILE *file; { @@ -4916,7 +4945,6 @@ dump_flow_info (file) for (i = 0; i < n_basic_blocks; i++) { register basic_block bb = BASIC_BLOCK (i); - register int regno; register edge e; fprintf (file, "\nBasic block %d: first insn %d, last %d, loop_depth %d.\n", @@ -4931,24 +4959,10 @@ dump_flow_info (file) dump_edge_info (file, e, 1); fprintf (file, "\nRegisters live at start:"); - if (bb->global_live_at_start) - { - for (regno = 0; regno < max_regno; regno++) - if (REGNO_REG_SET_P (bb->global_live_at_start, regno)) - fprintf (file, " %d", regno); - } - else - fprintf (file, " n/a"); + dump_regset (bb->global_live_at_start, file); fprintf (file, "\nRegisters live at end:"); - if (bb->global_live_at_end) - { - for (regno = 0; regno < max_regno; regno++) - if (REGNO_REG_SET_P (bb->global_live_at_end, regno)) - fprintf (file, " %d", regno); - } - else - fprintf (file, " n/a"); + dump_regset (bb->global_live_at_end, file); putc('\n', file); } @@ -5005,6 +5019,60 @@ dump_edge_info (file, e, do_succ) } +/* Print out one basic block with live information at start and end. */ +void +dump_bb (bb, outf) + basic_block bb; + FILE *outf; +{ + rtx insn; + rtx last; + edge e; + + fprintf (outf, ";; Basic block %d, loop depth %d", + bb->index, bb->loop_depth - 1); + if (bb->eh_beg != -1 || bb->eh_end != -1) + fprintf (outf, ", eh regions %d/%d", bb->eh_beg, bb->eh_end); + putc ('\n', outf); + + fputs (";; Predecessors: ", outf); + for (e = bb->pred; e ; e = e->pred_next) + dump_edge_info (outf, e, 0); + putc ('\n', outf); + + fputs (";; Registers live at start:", outf); + dump_regset (bb->global_live_at_start, outf); + putc ('\n', outf); + + for (insn = bb->head, last = NEXT_INSN (bb->end); + insn != last; + insn = NEXT_INSN (insn)) + print_rtl_single (outf, insn); + + fputs (";; Registers live at end:", outf); + dump_regset (bb->global_live_at_end, outf); + putc ('\n', outf); + + fputs (";; Successors: ", outf); + for (e = bb->succ; e; e = e->succ_next) + dump_edge_info (outf, e, 1); + putc ('\n', outf); +} + +void +debug_bb (bb) + basic_block bb; +{ + dump_bb (bb, stderr); +} + +void +debug_bb_n (n) + int n; +{ + dump_bb (BASIC_BLOCK(n), stderr); +} + /* Like print_rtl, but also print out live information for the start of each basic block. */ @@ -5057,14 +5125,7 @@ print_rtl_with_bb (outf, rtx_first) { fprintf (outf, ";; Start of basic block %d, registers live:", bb->index); - - EXECUTE_IF_SET_IN_REG_SET (bb->global_live_at_start, 0, i, - { - fprintf (outf, " %d", i); - if (i < FIRST_PSEUDO_REGISTER) - fprintf (outf, " [%s]", - reg_names[i]); - }); + dump_regset (bb->global_live_at_start, outf); putc ('\n', outf); } -- 2.11.4.GIT