diff options
author | steven <steven@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-07-20 12:25:55 +0000 |
---|---|---|
committer | steven <steven@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-07-20 12:25:55 +0000 |
commit | bec2cf98763e9ec1a4d41bd1db78a74ca8fefbd9 (patch) | |
tree | 303d907b5ee72aaa7b209fd1bcaf4f0ab16f41b1 /gcc/cfgrtl.c | |
parent | 59da1bcd780c2c76748b6dac277e146bb80db858 (diff) | |
download | gcc-bec2cf98763e9ec1a4d41bd1db78a74ca8fefbd9.tar.gz |
gcc/
* basic-block.h (BB_FLAGS_TO_PRESERVE): New define.
(brief_dump_cfg): Update prototype to take flags argument.
(check_bb_profile): Remove prototype.
* tracer.c (tracer): Update brief_dump_cfg calls.
* cfghooks.c (dump_bb): Do not pass TDF_COMMENT to dump_bb_info.
Call dump_bb_info before and after the cfghook dump_bb. Terminate
the dump with a newline.
(dump_flow_info): Do not call check_bb_profile.
* cfg.c (clear_bb_flags): Update using BB_FLAGS_TO_PRESERVE.
(check_bb_profile): Make static. Take indent and flags arguments.
(dump_bb_info): Always dump loop depth. With TDF_DETAILS, call
check_bb_profile. Print one edge per line.
(brief_dump_cfg): Take a flags argument, and filter out
TDF_COMMENT and TDF_DETAILS.
* pretty-print.c (pp_base_newline): Set pp_needs_newline to false.
* gimple-pretty-print.c (dump_gimple_bb_header): Do not use dump_bb_info
here, it is already called from dump_bb. Idem for check_bb_profile.
(dump_gimple_bb_footer): Likewise.
(gimple_dump_bb_buff): Call pp_flush after dump_gimple_stmt to
avoid broken dumps for statement histograms.
(gimple_dump_bb): Handle ENTRY_BLOCK and EXIT_BLOCK. Do
not call pp_flush here, the buffer should be empty.
* sched-rgn.c (debug_region): Pass TDF_BLOCKS to dump_bb.
* sched-vis.c (debug_bb_slim): Likewise.
* tree-cfg.c (remove_bb): Pass dump_flags to dump_bb.
(gimple_debug_bb): Pass TDF_BLOCKS to dump_bb.
(gimple_dump_cfg): Do brief_dump_cfg with TDF_COMMENT.
(dump_function_to_file): Do not call check_bb_profile on
ENTRY_BLOCK and EXIT_BLOCK, check_bb_profile doesn't handle them.
Use dump_bb instead of gimple_dump_bb.
(print_loops_bb): Use dump_bb instead of gimple_dump_bb.
* passes.c (execute_function_dump): Always call print_rtl_with_bb
for RTL dumps.
* cfgrtl.c (print_rtl_with_bb): Handle printing without an up-to-date
CFG. With TDF_BLOCKS and TDF_DETAILS, do DF dumps at the top and bottom
of each basic block.
testsuite/
* gcc.dg/tree-prof/update-loopch.c: Look for counts on the dumps of
the basic block and check loop depth.
* gcc.dg/tree-ssa/pr18133-1.c: Dump details, not blocks. Update
matching patterns and comments.
* gcc.dg/tree-ssa/20031021-1.c: Fix check patterns.
* gcc.dg/tree-ssa/vector-2.c: Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@189717 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cfgrtl.c')
-rw-r--r-- | gcc/cfgrtl.c | 77 |
1 files changed, 50 insertions, 27 deletions
diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c index e87f06db3a0..2bf22d86880 100644 --- a/gcc/cfgrtl.c +++ b/gcc/cfgrtl.c @@ -1875,8 +1875,9 @@ rtl_dump_bb (FILE *outf, basic_block bb, int indent, int flags) } -/* Like print_rtl, but also print out live information for the start of each - basic block. FLAGS are the flags documented in dumpfile.h. */ +/* Like dump_function_to_file, but for RTL. Print out dataflow information + for the start of each basic block. FLAGS are the TDF_* masks documented + in dumpfile.h. */ void print_rtl_with_bb (FILE *outf, const_rtx rtx_first, int flags) @@ -1891,52 +1892,74 @@ print_rtl_with_bb (FILE *outf, const_rtx rtx_first, int flags) basic_block *start = XCNEWVEC (basic_block, max_uid); basic_block *end = XCNEWVEC (basic_block, max_uid); enum bb_state *in_bb_p = XCNEWVEC (enum bb_state, max_uid); - basic_block bb; + /* After freeing the CFG, we still have BLOCK_FOR_INSN set on most + insns, but the CFG is not maintained so the basic block info + is not reliable. Therefore it's omitted from the dumps. */ + if (! (cfun->curr_properties & PROP_cfg)) + flags &= ~TDF_BLOCKS; + if (df) df_dump_start (outf); - FOR_EACH_BB_REVERSE (bb) + if (flags & TDF_BLOCKS) { - rtx x; - - start[INSN_UID (BB_HEAD (bb))] = bb; - end[INSN_UID (BB_END (bb))] = bb; - for (x = BB_HEAD (bb); x != NULL_RTX; x = NEXT_INSN (x)) + FOR_EACH_BB_REVERSE (bb) { - enum bb_state state = IN_MULTIPLE_BB; + rtx x; + + start[INSN_UID (BB_HEAD (bb))] = bb; + end[INSN_UID (BB_END (bb))] = bb; + for (x = BB_HEAD (bb); x != NULL_RTX; x = NEXT_INSN (x)) + { + enum bb_state state = IN_MULTIPLE_BB; - if (in_bb_p[INSN_UID (x)] == NOT_IN_BB) - state = IN_ONE_BB; - in_bb_p[INSN_UID (x)] = state; + if (in_bb_p[INSN_UID (x)] == NOT_IN_BB) + state = IN_ONE_BB; + in_bb_p[INSN_UID (x)] = state; - if (x == BB_END (bb)) - break; + if (x == BB_END (bb)) + break; + } } } for (tmp_rtx = rtx_first; NULL != tmp_rtx; tmp_rtx = NEXT_INSN (tmp_rtx)) { - bb = start[INSN_UID (tmp_rtx)]; - if (bb != NULL) - dump_bb_info (outf, bb, 0, dump_flags | TDF_COMMENT, true, false); + if (flags & TDF_BLOCKS) + { + bb = start[INSN_UID (tmp_rtx)]; + if (bb != NULL) + { + dump_bb_info (outf, bb, 0, dump_flags | TDF_COMMENT, true, false); + if (df && (flags & TDF_DETAILS)) + df_dump_top (bb, outf); + } - if (in_bb_p[INSN_UID (tmp_rtx)] == NOT_IN_BB - && !NOTE_P (tmp_rtx) - && !BARRIER_P (tmp_rtx)) - fprintf (outf, ";; Insn is not within a basic block\n"); - else if (in_bb_p[INSN_UID (tmp_rtx)] == IN_MULTIPLE_BB) - fprintf (outf, ";; Insn is in multiple basic blocks\n"); + if (in_bb_p[INSN_UID (tmp_rtx)] == NOT_IN_BB + && !NOTE_P (tmp_rtx) + && !BARRIER_P (tmp_rtx)) + fprintf (outf, ";; Insn is not within a basic block\n"); + else if (in_bb_p[INSN_UID (tmp_rtx)] == IN_MULTIPLE_BB) + fprintf (outf, ";; Insn is in multiple basic blocks\n"); + } if (! (flags & TDF_SLIM)) print_rtl_single (outf, tmp_rtx); else dump_insn_slim (outf, tmp_rtx); - bb = end[INSN_UID (tmp_rtx)]; - if (bb != NULL) - dump_bb_info (outf, bb, 0, dump_flags | TDF_COMMENT, false, true); + if (flags & TDF_BLOCKS) + { + bb = end[INSN_UID (tmp_rtx)]; + if (bb != NULL) + { + dump_bb_info (outf, bb, 0, dump_flags | TDF_COMMENT, false, true); + if (df && (flags & TDF_DETAILS)) + df_dump_bottom (bb, outf); + } + } putc ('\n', outf); } |