On Mon, Jul 16, 2012 at 8:57 AM, Steven Bosscher <stevenb....@gmail.com> wrote: > Hello, > > There are comments in basic-block.h that advise to update certain > parts of the compiler if a new edge flag or basic block flag is added: > > -/* Always update the table in cfg.c dump_edge_info. */ > > and > > - Always update the table in cfg.c dump_bb_info. */ > > Apparently this is not enough, because there are more places where the > BB flags are dumped. For instance, cfg.c:dump_cfg_bb_info does not > handle BB_MODIFIED, BB_VISITED, and BB_IN_TRANSACTION, and > dump_bb_info doesn't even exist in cfg.c (it's in cfgrtl.c). The flags > also aren't documented very well in the code. > > Furthermore, there are multiple places where "common" (i.e. IR > agnostic) basic block information is dumped, with some functions > taking TDF_* flags and others not, some functions taking a FILE as the > first argument and others as the second argument, etc. In short: > Unnecessarily messy. > > The attached patch cleans up the worst of it: > > * A new file cfg-flags.def is used to define the BB_* and EDGE_* > flags. The names are the full string of the name of the flag in > uppercase, that's a change from before. I can add a separate name > field to DEF_EDGE_FLAG and DEF_BB_FLAG if necessary. > > * Now that there is dumpfile.h for the TDF_* masks, it's easier to use > them everywhere. I have added one new flag to dump with the ";;" > prefix (I think it should be used in more places, but that's something > for later, perhaps). > > * All basic block header/footer and edge dumping is consolidated in > dump_edge_info and dump_bb_info. This affects GIMPLE dump the most, > because it uses a different form of dumping for basic block > predecessors and successors. I expect some fall-out in the test suite > (patterns that no longer match) that I'll have to address before the > patch is ready for mainline. > > * Slim RTL printing is better integrated: print_rtl_with_bb takes > flags and uses dump_rtl_slim if TDF_SLIM is passed. The same happens > in rtl_dump_bb, which always dumps non-slim RTL without this patch. > > Bootstrapped on powerpc64-unknown-linux-gnu. Testing will probably > reveal some test suite pattern mismatches, and I also still want to > bootstrap&test this on x86_64. > I'd like to hear what people think of the cfg-flags.def change. > > Ciao! > Steven > > * dumpfile.h (TDF_COMMENT): New define. > * basic-block.h (EDGE_FALLTHRU, EDGE_ABNORMAL, EDGE_ABNORMAL_CALL, > EDGE_EH, EDGE_FAKE, EDGE_DFS_BACK, EDGE_CAN_FALLTHRU, > EDGE_IRREDUCIBLE_LOOP, EDGE_SIBCALL, EDGE_LOOP_EXIT, EDGE_TRUE_VALUE, > EDGE_FALSE_VALUE, EDGE_EXECUTABLE, EDGE_CROSSING, EDGE_PRESERVE): > Move to new file cfg-flags.h. > (enum cfg_edge_flags): New enum, using cfg-flags.h. > (EDGE_ALL_FLAGS): Compute value automatically. > (BB_NEW, BB_REACHABLE, BB_IRREDUCIBLE_LOOP, BB_SUPERBLOCK, > BB_DISABLE_SCHEDULE, BB_HOT_PARTITION, BB_COLD_PARTITION, > BB_DUPLICATED, BB_NON_LOCAL_GOTO_TARGET, BB_RTL, > BB_FORWARDER_BLOCK, BB_NONTHREADABLE_BLOCK, BB_MODIFIED, BB_VISITED, > BB_IN_TRANSACTION): Move to new file cfg-flags.h. > (enum bb_flags): Rename to cfg_bb_flags. Use cfg-flags.h. > (BB_ALL_FLAGS): New, compute value automatically. > (dump_bb_info): Update prototype. > (dump_edge_info): Update prototype. > * cfg-flags.h: New file. > * cfg.c (dump_edge_info): Take flags argument. Be verbose only if > TDF_DETAILS and not TDF_SLIM. Include cfg-flags.h for bitnames. > Check that the edge flags are within the range of EDGE_ALL_FLAGS. > (debug_bb): Update dump_bb call. > (dump_cfg_bb_info): Remove. > (dump_bb_info): New function. Use cfg-flags.h for bitnames. > Adjust verbosity using TDF_* flags. Check that the basic block flags > are within the range of BB_ALL_FLAGS. > (brief_dump_cfg): Use dump_bb_info instead of dump_cfg_bb_info. > * cfghooks.h (struct cfghooks): Update dump_bb hook, take a FILE > first for consistency with other dump functions. > (dump_bb): Update prototype accordingly. > * cfghooks.c: Include dumpfile.h. > (verify_flow_info): Update dump_edge_info calls. > (dump_bb): Take a flags argument and pass it around. > Use dump_bb_info to dump common information about a basic block. > (dump_flow_info): Moved here from cfgrtl.c. Make IL agnostic. > (debug_flow_info): Moved here from cfgrtl.c. > * profile.c (is_edge_inconsistent): Update dump_bb calls. > * loop-invariant.c (find_defs): Update print_rtl_with_bb call. > * rtl.h (debug_bb_n_slim, debug_bb_slim, print_rtl_slim, > print_rtl_slim_with_bb): Remove prototypes. > (dump_insn_slim): Adjust prototype to take a const_rtx. > (print_rtl_with_bb): Adjust prototype. > * sched-rgn.c (debug_region): Use dump_bb instead of debug_bb_n_slim. > * sched-vis.c (dump_insn_slim): Take a const_rtx. > (debug_insn_slim): Prototype here near DEBUG_FUNCTION marker. > (print_rtl_slim_with_bb): Remove. > (print_rtl_slim): Rename to debug_rtl_slim. Print only insn info, > not basic block info (print_rtl_with_bb with TDF_SLIM should be used > for that. Prototype here near DEBUG_FUNCTION marker. > (debug_bb_slim): Prototype here near DEBUG_FUNCTION marker. > Use dump_bb. > (debug_bb_n_slim): Prototype here near DEBUG_FUNCTION marker. > * tree-cfg.c (gimple_can_merge_blocks_p): Use EDGE_COMPLEX. > (remove_bb): Update dump_bb call. > (gimple_debug_bb): Use dump_bb. > (dump_function_to_file): Update gimple_dump_bb call. > (print_loops_bb): Likewise. > * tree-flow.h (gimple_dump_bb): Update prototype. > * gimple-pretty-print.c (dump_bb_header): Rename to > dump_gimple_bb_header. Write to a stream instead of a pretty > printer. Use dump_bb_info to dump basic block info. > (dump_bb_end): Rename to dump_gimple_bb_footer. Write to a > stream instead of a pretty printer. Use dump_bb_info. > (gimple_dump_bb_buff): Do not call dump_bb_header and dump_bb_end. > (gimple_dump_bb): Do it here with dump_gimple_bb_header and > dump_gimple_bb_footer. > * cfgrtl.c (rtl_dump_bb): Update prototype. Only dump DF if the > dump flags have TDF_DETAILS. Use dump_insn_slim if TDF_SLIM. > (print_rtl_with_bb): Take a flags argument and pass it around. > Use dump_insn_slim if TDF_SLIM. > (dump_bb_info): Removed and re-incarnated in cfg.c. > (dump_flow_info): Moved to cfghooks.c. > (debug_flow_info): Moved to cfghooks.c. > * passes.c (execute_function_dump): Unconditionally use > print_rtl_with_bb for RTL dumps, now that it understands TDF_SLIM. > * final.c (dump_basic_block_info): Update dump_edge_info calls. > * tree-vrp.c (dump_asserts_for): Likewise. > * ifcvt.c (if_convert): Unconditionally use print_rtl_with_bb. > * tree-if-conv.c (if_convertible_bb_p): Don't look at > EDGE_ABNORMAL_CALL, it has no meaning in the GIMPLE world. > * trans-mem.c (make_tm_edge): Don't set EDGE_ABNORMAL_CALL, > for the same reason. > * config/rl78/rl78.c (rl78_reorg): Update print_rtl_with_bb calls.
This caused: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54008 -- H.J.