Ping! Unreviewed patch (hot/cold partitioning update)

Caroline Tice ctice@apple.com
Mon Aug 16 21:52:00 GMT 2004


This is the rest of the hot/cold partitioning update patch, again.  I 
have removed the tiny part that Mark
Mitchell already approved and the objectionable change to 
config/pa/som.h that John Anglin pointed out
was incorrect.   That leave 1189 lines of patch to be reviewed.  Since 
it's already been a month since my
original patch submission (this is the THIRD ping), I would really 
appreciate somebody reviewing it before
it becomes hopelessly out of sync with the current source tree.  Thank 
you VERY much.

-- Caroline Tice
ctice@apple.com

 From my original submission (on July 15):

This patch fixes what I consider to be the worst of the problems with 
the hot/cold partitioning optimization.  The
issues it does not address are: 1). making partitioning work correctly 
with dwarf debugging turned on.  That will
be the topic for the next hot/cold partitioning patch.  What this patch 
does is warns users that "-g" doesn't work
with hot/cold partitioning (if their debug format is DWARF), and 
changes the partitioning option to just
basic block reordering.  2).  Some efficiency concerns.  Those can also 
be addressed in a later patch.  I really
wanted to focus this patch on what I consider to be correctness issues.

The problems that this patch does attempt to address/fix are:

- Fix places where adding in_unlikely_executed_text to the enum data 
type "in_section"  threw off switch
    case statements.
- Make it work correctly (by turning it off) for functions where user 
specifies "__attribute__ section"
- Make it work correctly (by turning it off) for linkonce sections
- Make it work correctly with -ffunction-sections flag
- Make it output correct cold section labels
- Make it set section alignments at start of function rather than on 
each section switch
- Undo some changes to original assembly code generation
- Turn off hot/cold partitioning in the presence of DWARF debugging 
(for the moment)
- Turn off hot/cold partitioning for architectures that do not support 
named sections
- Use variables rather than constants for cold section labels and names 
(to work correctly with
	-ffunction-sections, among other things)


I have tested this patch on Apple G4 & G5 running apple-darwin, and on 
an i386 running Linux.  The tests
include doing a profiledbootstrap with hot/cold partitioning turned on 
(and debugging turned off on the i386);
running DejaGnu tests; and running all the SPECInt tests (with 
partitioning) that the mainline compiler can pass
(without partitioning).

I would appreciate it if people with experience with the following 
config files could make sure I didn't do
the wrong thing in there by accident:

	gcc/config/arm/pe.h
	gcc/config/i386/cygming.h
	gcc/config/mcore/mcore.h

Is this patch okay to commit to gcc 3.5 mainline?

Updated ChangeLog Entry:

2004-08-16  Caroline Tice  <ctice@apple.com>

         * Makefile.in (STAGEFEEDBACK_FLAGS_TO_PASS) Add
         "-freorder-blocks-and-partition" to the flags used in second
         stage of profiledbootstrap.
         * bb-reorder.c (push_to_next_round_p): Add new variable,
         next_round_is_last; set and use variable to make sure, when
         partitioning, that the last trace construction round consists
         of all (and only) cold basic blocks.
         (rotate_loop): Don't copy blocks that end in a section
         crossing jump.
         (copy_bb): Correctly initialize "partition" of duplicated bb.
         (add_unlikely_executed_notes): Add a comment.
         (find_rarely_executed_basic_blocks_and_crossing_edges): Modify
         to make sure, if function contains hot blocks, that the
         successors of ENTRY_BLOCK_PTR are hot; also, only look for
         crossing edges if the architecture supports named sections.
         (mark_bb_for_unlikely_executed_section): Modify to always
         insert the NOTE_INSN_UNLIKELY_EXECUTED_CODE immediately after
         the basic block note insn.
         (fix_crossing_unconditional_branches): Remove extra space.
         (fix_edges_for_rarely_executed_code): Modify to only do
         partitioning work if the architecture supports named sections.
         (reorder_basic_blocks): Modify to only add
         NOTE_INSN_UNLIKELY_EXECUTED_CODE notes if the architecture
         supports named sections.
         * c-common.c (handle_section_attribute): Initialize new global
         variable, user_defined_section_attribute, to true if user has
         specified one.
         * cfgcleanup.c (try_forward_edges): Modify to not attempt to
         forward edges that cross section boundaries.
         * cfglayout.c (fixup_reorder_chain): Modify to only fix up
         partitioning information if the architecture supports named
         sections.
         * cfgrtl.c (target.h): Add statement to include this.
         (rtl_split_block): Make sure newly created bb gets correct
         partition.
         (try_redirect_by_replacing_jump): Make sure redirection isn't
         attempting to cross section boundaries.
         (force_nonfallthru_and_redirect): Only do partition fix up if
         architecture supports named sections.
         (rtl_split_edge): Make sure newly created bb ends up in
         correct partition.
         (commit_one_edge_insertion): Remove code that incorrectly
         updated basic block partition; Make sure partition fix up only
         happens if architecture supports named sections and it's not
         already done.
         (rtl_verify_flow_info_1): Fix if-condition on test/error
         condition that fallthru edges are not allowed to cross section
         boundaries.
         * defaults.h (NORMAL_TEXT_SECTION_NAME): Remove this.
         * final.c (final_scan_insn): Remove redundant test from 
if-statement;
         change calls to text_section into calls to function_section; 
add code
         to only to partitioning fix up if architecture supports named
         sections.
         * ifcvt.c (find_if_case_1): Make sure newly created bb has 
correct
         partition.
         (if_convert): Add targetm.have_named_sections to test.
         * output.h (unlikely_section_label): Extern declaration for new 
global
         variable.
         (unlikely_text_section_name): Likewise.
         * opts.c (decode_options): If both partitioning and DWARF 
debugging
         are turned on, issue a warning that this doesn't work, and 
change
         partitiong to basic block reordering (without hot/cold 
partitions).
         * passes.c (rest_of_handle_final): Re-set new global variable,
         user_defined_section_attribute, to false.
         (rest_of_compilation): Change options for calling partitioning
         function: Don't call if the user defined the section attribute, 
and
         don't call if DECL_ONE_ONLY is true for the current function.
         * predict.c (choose_function_section): Return immediately if we
         are doing hot/cold partitioning (i.e. let the basic block 
partitioning
         determine where the function belongs).
         * reg-stack.c (emit_swap_insn): Add condition to step over
         NOTE_INSN_UNLIKELY_EXECUTED_CODE notes.
         * toplev.c (user_defined_section_attribute): New global 
variable.
         * toplev.h (user_defined_section_attribute): Extern declaration 
for new
         global variable.
         * varasm.c (unlikely_section_label): New global variable.
         (unlikely_text_section_name): New global variable.
         (unlikely_text_section): Add code to initialize 
unlikely_text_section_name
         if necessary; modify to use unlikely_text_section_name and
         unlikely_section_label; also to use named_section properly.
         (in_unlikely_text_section):  Modify to work correctly with 
named_section
         and to use unlikely_text_section_name.
         (named_section):  Add code to work properly with cold section.
         (function_section): Clean up if-statement.
         * config/darwin.c (darwin_asm_named_section): Return to 
original code,
         removing use of SECTION_FORMAT_STRING.
         * config/arm/pe.h (switch_to_section):  Add case for
         in_unlikely_executed_text to switch statement.
         * config/i386/cygming.h (switch_to_section): Likewise.
         * config/i386/darwin.h (NORMAL_TEXT_SECTION_NAME): Remove.
         (SECTION_FORMAT_STRING): Likewise.
         * config/mcore/mcore.h (switch_to_section): Likewise.
         * config/rs6000/darwin.h (NORMAL_TEXT_SECTION_NAME): Remove.
         (SECTION_FORMAT_STRING): Remove.


-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: gcc5-hot-cold5f.txt
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20040816/1dd971f9/attachment.txt>
-------------- next part --------------




More information about the Gcc-patches mailing list