This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] New fixes for hot/cold partitioning
- From: Caroline Tice <ctice at apple dot com>
- To: "gcc-patches at gcc dot gnu dot org Patches" <gcc-patches at gcc dot gnu dot org>
- Cc: Daniel Jacobowitz <drow at false dot org>, Caroline Tice <ctice at apple dot com>, zack Weinberg <zack at codesourcery dot com>, David Edelsohn <dje at watson dot ibm dot com>
- Date: Wed, 6 Apr 2005 11:32:46 -0700
- Subject: Re: [PATCH] New fixes for hot/cold partitioning
- References: <6B738E1E-A527-11D9-BC0C-0030656ADC2A@apple.com>
Okay, let's try it again. :-) I have tried to address everyone's
concerns about the hot/cold partitioning patch I submitted on Monday.
Here's an updated version of the patch. It does the following things
differently:
- Turn off partitioning flag if not targetm.have_named_sections (and
remove all the target,have_named_sections tests that this makes
superfluous)
- Adds unlikely_text_section_name as field in function struct, and
updates code to use this (and keeps it a char* rather than an array).
- Adds calls to strip_name_encoding before building up cold section
name.
As well as doing the following things the other patch did;
- It makes the hot/cold section labels be pointed to by fields in the
function struct.
- It uses ASM_GENERATE_INTERNAL_LABEL to generate the values for these
labels.
- It changes the argument passed to ASM_SELECT_SECTION from 'bool
unlikely' to 'int reloc' in both current_function_section and
function_section.
- It updates dbxout.c and dwarf2out.c to get the section labels from
the function record for the current function.
- It adds cold_text_section_label, cold_end_label and the
corresponding macros to dwarf2out.c, and uses them appropriately.
- It removes or updates some incorrect code I had previously
written in dwarf2out.c
- It checks the partitiong flag before calling
verify_hot_cold_block_grouping.
I am running tests on both an x86 running Linux and a Apple G4 running
powerpc Darwin. So far it has passed the profiledbootstrap with
partitionining, and I'm in the process of running the
profiledbootstrap without partitioning but with reordering. I will
also run a regular bootstrap and the DejaGnu tests, as well as some
SPEC2000 benchmarks with partitioning. Assuming it passes all the
tests, is this okay to commit to FSF mainline?
-- Caroline Tice
ctice@apple.com
2005-04-06 Caroline Tice <ctice@apple.com>
* bb-reorder.c
(find_rarely_executed_basic_blocks_and_crossing_edges):
Remove targetm.have_named_sections test.
(fix_edges_for_rarely_executed_code): Likewise.
(insert_section_boundary_note): Likewise.
(reorder_basic_blocks): Check partitioning flag before calling
verify_hot_cold_block_grouping.
* dbxout.c (dbxout_function_end): Get hot/cold section labels
from
the function struct rather than global variables.
* dwarf2out.c (COLD_TEXT_SECTION_LABEL): New macro.
(COLD_END_LABEL): Likewise
(cold_text_section_label): New static global variable.
(cold_end_label): Likewise.
(dwarf2out_switch_text_section): Get hot/cold section labels
from
the function struct rather than global variables.
(output_aranges): Use cold_text_section_label and
cold_end_label;
check partitioning flag before putting out delta.
(output_ranges): Remove incorrect code attempting to use
hot/cold labels.
(output_line_info): Get cold section label from function struct.
(add_location_or_const_value_attribute): Likewise.
(get_subprogram_die): Get hot/cold section labels from function
struct.
(dwarf2out_var_location): Likewise.
(dwarf2out_init): Generate cold_text_section_label and
cold_end_label;
write out cold_text_section_label if partition flag is set.
(dwarf2out_finish): Write out cold_end_label if partition flag
is set;
* function.h (struct function): Add new fields to point to
hot/cold
section labels: hot_section_label, cold_section_label,
hot_section_end_label and cold_section_end_label; also add new
field
for cold text section name, unlikely_text_section_name.
* opts.c (decode_options): Turn off partitioning flag if
!targetm.have_named_sections.
* output.h (hot_section_label): Remove.
(hot_section_end_label): Remove.
(cold_section_end_label): Remove.
(unlikely_section_label): Remove.
(unlikely_text_section_name): Remove.
* passes.c (rest_of_handle_final): Remove code that frees
unlikely_text_section_name.
* varasm.c (unlikely_section_label): Remove.
(hot_section_label): Remove.
(hot_section_end_label): Remove.
(cold_section_end_label): Remove.
(unlikely_text_section_name): Remove.
(initialize_cold_section_name): Modify to call
targetm.strip_name_encoding; to store cold section name in
current
function struct, if it exists; and to only use the
decl_section_name
if flag_named_sections is true.
(unlikely_text_section): Modify to get section name out of
current
function struct, if there is one; otherwise build it from
UNLIKELY_EXECUTED_TEXT_SECTION_NAME.
(in_unlikely_text_section): Likewise.
(named_section): Modify to get/put cold section name in current
function
struct, if there is one.
(function_section): Change 'bool unlikely' to 'int reloc';
check
targetm.have_named_sections before calling named_section.
(current_function_section): Likewise.
(assemble_start_function): Modify to get/put
unlikely_text_section_name
in current function struct; modify to get hot/cold section
labels
from function struct; initialize labels using
ASM_GENERATE_INTERNAL_LABEL;
test partitioning flag before writing out hot section label.
(assemble_end_function): Test partitioning flag before writing
out
hot/cold section labels.
(default_section_type_flags_1): Modify to use array instead of
char* for unlikely_text_section_name; set flags correctly for
cold text section if there is not a current function decl.
Attachment:
gcc5-hot-cold.txt
Description: Text document