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.

Reply via email to