This is the mail archive of the gcc-cvs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

gcc/gcc ChangeLog basic-block.h bb-reorder.c c ...


CVSROOT:	/cvs/gcc
Module name:	gcc
Changes by:	ctice@gcc.gnu.org	2004-04-09 19:57:48

Modified files:
	gcc            : ChangeLog basic-block.h bb-reorder.c cfg.c 
	                 cfgbuild.c cfgcleanup.c cfghooks.c cfglayout.c 
	                 cfglayout.h cfgrtl.c common.opt dbxout.c 
	                 defaults.h final.c flags.h ifcvt.c opts.c 
	                 output.h passes.c print-rtl.c rtl.c rtl.h 
	                 toplev.c varasm.c 
	gcc/config     : darwin.c 
	gcc/config/i386: i386.h 
	gcc/config/rs6000: darwin.h rs6000.c sysv4.h 
	gcc/doc        : invoke.texi rtl.texi tm.texi 

Log message:
	2004-04-09  Caroline Tice  <ctice@apple.com>
	
	* basic-block.h (struct edge_def):  Add new field, crossing_edge.
	(struct basic_block_def):  Add new field, partition.
	(UNPARTITIONED, HOT_PARTITION, COLD_PARTITION):  New constant macro
	definitions.
	(partition_hot_cold_basic_blocks): Add extern function
	declaration.
	* bb-reorder.c (function.h, obstack.h, expr.h, regs.h):  Add four new
	include statements.
	(N_ROUNDS): Increase the maximum number of rounds by 1.
	(branch_threshold): Add array value for new round.
	(exec_threshold): Add array value for new round.
	(push_to_next_round_p): New function.
	(add_unlikely_executed_notes): New function.
	(find_rarely_executed_basic_blocks_and_crossing_edges): New function.
	(mark_bb_for_unlikely_executed_section): New function.
	(add_labels_and_missing_jumps): New function.
	(add_reg_crossing_jump_notes): New function.
	(fix_up_fall_thru_edges): New function.
	(find_jump_block): New function.
	(fix_crossing_conditional_branches): New function.
	(fix_crossing_unconditional_branches): New function.
	(fix_edges_for_rarely_executed_code): New function.
	(partition_hot_cold_basic_blocks): New function.
	(find_traces):  Add an extra round for partitioning hot/cold
	basic blocks.
	(find_traces_1_round): Add a parameter.  Modify to push all cold blocks,
	and only cold blocks, into the last (extra) round of collecting traces.
	(better_edge_p): Add a parameter.  Modify to favor non-crossing edges
	over crossing edges.
	(bb_to_key):  Add code to correctly identify cold blocks when
	doing partitioning.
	(connect_traces): Modify to connect all the non-cold traces first, then
	go back and connect up all the cold traces.
	(reorder_basic_blocks):  Add call to add_unlikely_executed_notes.
	* cfg.c (entry_exit_blocks): Add initialization for partition field in
	entry and exit blocks.
	* cfgbuild.c (make_edges): Update current_function_has_computed_jump
	if we are doing hot/cold partitioning.
	* cfgcleanup.c (cfglayout.h): Add new include statement.
	(try_simplify_condjump): Modify to not attempt on blocks with jumps
	that cross section boundaries.
	(try_forward_edges): Likewise.
	(merge_blocks_move_predecessor_nojumps): Likewise.
	(merge_blocks_move_successor_nojumps): Likewise.
	(merge_blocks_move): Likewise.
	(try_crossjump_to_edge): Modify to not attempt after we have done
	the block partitioning.
	(try_crossjump_bb): Modify to not attempt on blocks with jumps that
	cross section boundaries.
	(try_optimize_cfg): Likewise.
	* cfghooks.c (tidy_fallthru_edges): Modify to not remove indirect
	jumps that cross section boundaries.
	* cfglayout.c (flags.h): Add new include statement.
	(update_unlikely_executed_notes):  New function.
	(fixup_reorder_chain):  Add code so when a new jumping basic block is
	added, it's UNLIKELY_EXECUTED_CODE and REG_CROSSING_JUMP notes are
	updated appropriately.
	(duplicate_insn_chain):  Add code to duplicate the new NOTE insn
	introduced by this optimization.
	* cfglayout.h (scan_ahead_for_unlikely_executed_note):  Add new
	extern function declaration.
	* cfgrtl.c (can_delete_note_p):  Add NOTE_INSN_UNLIKELY_EXECUTED_CODE to
	list of notes that can be deleted.
	(create_basic_block_structure):  Add initialization for partition field.
	(rtl_can_merge_blocks):  Modify to test blocks for jumps that cross
	section boundaries.
	(try_redirect_by_replacing_jump):  Modify to not attempt on jumps that
	cross section boundaries.
	(commit_one_edge_insertion): Add code so newly created basic block
	ends up in correct (hot or cold) section.  Modify to disallow
	insertions before NOTE_INSN_UNLIKELY_EXECUTED_CODE notes.
	(rtl_verify_flow_info_1):  Add code to verify that no fall_thru edge
	crosses section boundaries.
	(cfg_layout_can_merge_blocks_p): Modify to test blocks for jumps that
	cross section boundaries.
	(force_nonfallthru_and_redirect): Modify to make sure new basic block
	ends up in correct section, with correct notes attached.
	* common.opt (freorder-blocks-and-partition):  Add new flag for this
	optimization.
	* dbxout.c (dbx_function_end):  Add code to make sure scope labels at
	the end of functions are written into the correct (hot or cold)
	section.
	(dbx_source_file): Add code so writing debug file information
	doesn't incorrectly change sections.
	* defaults.h (NORMAL_TEXT_SECTION_NAME): New constant macro, for use
	in partitioning hot/cold basic blocks into separate sections.
	(SECTION_FORMAT_STRING): New constant macro, for linux/i386 hot/cold
	section partitioning.
	(HAS_LONG_COND_BRANCH): New constant macro, indicating whether or not
	conditional branches can span all of memory.
	(HAS_LONG_UNCOND_BRANCH): New constant macro, indicationg whether or not
	unconditional branches can span all of memory.
	* final.c (scan_ahead_for_unlikely_executed_note):  New function.
	(final_scan_insn):  Add code to check for NOTE instruction indicating
	whether basic block belongs in hot or cold section, and to make sure
	the current basic block is being written to the appropriate section.
	Also added code to ensure that jump table basic blocks end up in the
	correct section.
	* flags.h (flag_reorder_blocks_and_partition):  New flag.
	* ifcvt.c (find_if_case_1):  Modify to not attempt if conversion if
	one of the branches has a jump that crosses between sections.
	(find_if_case_2): Likewise.
	(ifcvt): Modify to not attempt to mark loop exit edges after
	hot/cold partitioning has occurred.
	* opts.c (decode_options): Code to handle new flag,
	flag_reorder_blocks_and_partition; also to turn it off if
	flag_exceptions is on.
	(common_handle_option): Code to handle new flag,
	flag_reorder_blocks_and_partition.
	* output.h (unlikely_text_section): New extern function declaration.
	(in_unlikely_text_section): New extern function declaration.
	* passes.c (rest_of_handle_stack_regs):  Add
	flag_reorder_blocks_and_partition as an 'or' condition for calling
	reorder_basic_blocks.
	(rest_of_handle_reorder_blocks):  Add flag_reorder_blocks_and_partition
	as an 'or' condition for calling reorder_basic_blocks.
	(rest_of_compilation):  Add call to partition_hot_cold_basic_blocks.
	* print-rtl.c (print_rtx): Add code for handling new note,
	NOTE_INSN_UNLIKELY_EXECUTED_CODE
	* rtl.c  (NOTE_INSN_UNLIKELY_EXECUTED_CODE): New note insn (see below).
	(REG_CROSSING_JUMP): New kind of reg_note, to mark jumps that
	cross between section boundaries.
	* rtl.h (NOTE_INSN_UNLIKELY_EXECUTED_CODE):  New note instruction,
	indicating the basic block containing it belongs in the cold section.
	(REG_CROSSING_JUMP): New type of reg_note, to mark jumps that cross
	between hot and cold sections.
	* toplev.c (flag_reorder_blocks_and_partition):  Add code to
	initialize this flag, and to tie it to the command-line option
	freorder-blocks-and-partition.
	* varasm.c (cfglayout.h):  Add new include statement.
	(unlikely_section_label_printed):  New global variable, used for
	determining when to output section name labels for cold sections.
	(in_section):  Add in_unlikely_executed_text to enum data structure.
	(text_section):  Modify code to use SECTION_FORMAT_STRING and
	NORMAL_TEXT_SECTION_NAME macros.
	(unlikely_text_section):  New function.
	(in_unlikely_text_section):  New function.
	(function_section):  Add code to make sure beginning of function is
	written into correct section (hot or cold).
	(assemble_start_function):  Add code to make sure stuff is written to
	the correct section.
	(assemble_zeros):  Add in_unlikely_text_section as an 'or' condition
	to an if statement that was checking 'in_text_section'.
	(assemble_variable):  Add 'in_unlikely_text_section' as an 'or'
	condition to an if statement that was checking 'in_text_section'.
	(default_section_type_flags_1):  Add check: if in cold section
	flags = SECTION_CODE.
	* config/darwin.c (darwin_asm_named_section):  Modify to use
	SECTION_FORMAT_STRING if we are partitioning hot/cold blocks.
	* config/i386/i386.h (HAS_LONG_COND_BRANCH): Defined this macro
	specifically for the i386.
	(HAS_LONG_UNCOND_BRANCH):  Defined this macro specifically for the i386.
	* config/rs6000/darwin.h (UNLIKELY_EXECUTED_TEXT_SECTION_NAME): Change
	text string to something more informative.
	(NORMAL_TEXT_SECTION_NAME): Add new definition.
	(SECTION_FORMAT_STRING):  Add new definition.
	* config/rs6000/rs6000.c (rs6000_assemble_integer):  Add
	'!in_unlikely_text_section' as an 'and' condition to an if statement
	that was already checking '!in_text_section'.
	* config/rs6000/sysv4.h (HOT_TEXT_SECTION_NAME,NORMAL_TEXT_SECTION_NAME,
	UNLIKELY_EXECUTED_TEXT_SECTION_NAME,SECTION_FORMAT_STRING): Make
	sure these are properly defined for linux on ppc.
	* doc/invoke.texi  (freorder-blocks-and-partition): Add documentation
	for this new flag.
	* doc/rtl.texi (REG_CROSSING_JUMP):  Add documentation for new
	reg_note.
	* doc/tm.texi (NORMAL_TEXT_SECTION_NAME, SECTION_FORMAT_STRING,
	HAS_LONG_COND_BRANCH, HAS_LONG_UNCOND_BRANCH): Add documentation for
	these new macros.

Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ChangeLog.diff?cvsroot=gcc&r1=2.3375&r2=2.3376
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/basic-block.h.diff?cvsroot=gcc&r1=1.192&r2=1.193
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/bb-reorder.c.diff?cvsroot=gcc&r1=1.66&r2=1.67
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cfg.c.diff?cvsroot=gcc&r1=1.58&r2=1.59
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cfgbuild.c.diff?cvsroot=gcc&r1=1.43&r2=1.44
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cfgcleanup.c.diff?cvsroot=gcc&r1=1.111&r2=1.112
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cfghooks.c.diff?cvsroot=gcc&r1=1.9&r2=1.10
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cfglayout.c.diff?cvsroot=gcc&r1=1.55&r2=1.56
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cfglayout.h.diff?cvsroot=gcc&r1=1.10&r2=1.11
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cfgrtl.c.diff?cvsroot=gcc&r1=1.115&r2=1.116
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/common.opt.diff?cvsroot=gcc&r1=1.30&r2=1.31
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/dbxout.c.diff?cvsroot=gcc&r1=1.183&r2=1.184
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/defaults.h.diff?cvsroot=gcc&r1=1.133&r2=1.134
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/final.c.diff?cvsroot=gcc&r1=1.309&r2=1.310
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/flags.h.diff?cvsroot=gcc&r1=1.134&r2=1.135
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ifcvt.c.diff?cvsroot=gcc&r1=1.142&r2=1.143
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/opts.c.diff?cvsroot=gcc&r1=1.63&r2=1.64
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/output.h.diff?cvsroot=gcc&r1=1.138&r2=1.139
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/passes.c.diff?cvsroot=gcc&r1=2.9&r2=2.10
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/print-rtl.c.diff?cvsroot=gcc&r1=1.106&r2=1.107
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/rtl.c.diff?cvsroot=gcc&r1=1.136&r2=1.137
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/rtl.h.diff?cvsroot=gcc&r1=1.467&r2=1.468
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/toplev.c.diff?cvsroot=gcc&r1=1.891&r2=1.892
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/varasm.c.diff?cvsroot=gcc&r1=1.418&r2=1.419
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/darwin.c.diff?cvsroot=gcc&r1=1.65&r2=1.66
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/i386/i386.h.diff?cvsroot=gcc&r1=1.383&r2=1.384
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/rs6000/darwin.h.diff?cvsroot=gcc&r1=1.51&r2=1.52
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/rs6000/rs6000.c.diff?cvsroot=gcc&r1=1.621&r2=1.622
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/rs6000/sysv4.h.diff?cvsroot=gcc&r1=1.146&r2=1.147
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/doc/invoke.texi.diff?cvsroot=gcc&r1=1.442&r2=1.443
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/doc/rtl.texi.diff?cvsroot=gcc&r1=1.65&r2=1.66
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/doc/tm.texi.diff?cvsroot=gcc&r1=1.318&r2=1.319


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]