On Mon, Jul 16, 2012 at 9:55 PM, Steven Bosscher <stevenb....@gmail.com> wrote: > On Mon, Jul 16, 2012 at 5:57 PM, 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. > > As it turns out, the test suite passes without new regressions on > powerpc64-unknown-linux-gnu and on x86_64-unknown-linux-gnu. > Apparently there aren't any patterns checking edge or bb info. Good > for me :-) > > OK for trunk?
Nice. Ok! Thanks, Richard. > 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.