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]

r121418 - in /branches/sel-sched-branch/gcc: Ch...


Author: abel
Date: Wed Jan 31 11:55:34 2007
New Revision: 121418

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=121418
Log:
	* sel-sched.h, sel-sched-dump.h, sel-sched-ir.h, sel-sched.c,
	sel-sched-dump.c, sel-sched-ir.c, sched-deps.h, 
	sched-rgn.h: New files.

	* cfghooks.h (rtl_delete_block_not_barriers): New prototype.
	* cfgrtl.c (get_last_bb_insn_1): New forward declaration.
	(rtl_delete_block_1): New static function.  Move logic from ...
	(rtl_delete_block): ... here.
	(rtl_delete_block_not_barriers): New function.
	(get_last_bb_insn_1): New static function.  Move logic from ... 
	(get_last_bb_insn): .. here.
	* common.opt (fsel-sched-emulate-haifa, fsel-sched-bookkeeping,
	fsel-sched-pipelining, fsel-sched-pipelining-verbose,
	fsel-sched-renaming, fsel-sched-substitution, fsel-sched-verbose,
	fsel-sched-dump-cfg, fsel-sched-single-block-regions,
	fsel-sched-ebb-regions, fselective-scheduling): New flags.
	* ddg.c: Include sched-deps.h.
	* emit-rtl.c (add_insn, add_insn_after, add_insn_before): Call
	insn_added hook.
	* haifa-sched.c: Include sched-deps.h.
	(issue_rate, sched_verbose_param, note_list, dfa_state_size,
	ready_try, cycle_issued_insns, dfa_lookahead, max_luid): Make global.
	(sched_max_uid, common_sched_info, uid_to_luid, reg_weights,
	sched_bbs, sched_insns, ready): New global variables.
	(glat_start, glat_end): Initialize with NULL.
	(struct ready_list): Move declaration to sched-int.h.
	(ready_p, rgn_n_insns): Initialize.
	(current_sched_info_var): Change type to struct haifa_sched_info.
	(dep_cost_1): New static function.  Prototype it.  Move logic from ... 
	(insn_cost1): ... here. 
	(dep_cost): New static function.
	(priority): Adjust to work with selective scheduling.  Use 
	sched_deps_info instead of current_sched_info.  Process the corner
	case when all dependencies don't contribute to priority.
	(ready_lastpos, ready_element, ready_sort, reemit_notes, move_insn,
	find_fallthru_edge): Make global, remove static prototypes.
	(advance_state): New function.  Move logic from ... 
	(advance_one_cycle): ... here.
	(schedule_insn): Use sched_deps_info instead of current_sched_info.
	(add_to_note_list, concat_note_lists): New functions. 
	(unlink_other_notes): Move logic to add_to_note_list.  Handle
	selective scheduler.
	(rm_other_notes): Make static.  Adjust for selective scheduling.
	(remove_notes, restore_other_notes): New functions.
	(find_insn_reg_weight1): Rename to find_insn_reg_weight.
	(find_insn_reg_weight): Remove.
	(max_issue): Add privileged_n and state parameters.  Use them.
	Add comments.  Move debug dumping to choose_ready.
	(choose_ready): Remove lookahead variable, use dfa_lookahead.
	Remove more_issue, max_points.  Move the code to initialize 
	max_lookahead_tries to max_issue.
	(schedule_block): Remove rgn_n_insns1 parameter.  Don't allocate
	ready.  Adjust uses of move_insn.  Call restore_other_notes.
	(sched_init, sched_finish): Move Haifa-specific initialization/
	finalization to ... 
	(haifa_sched_init, haifa_sched_finish): ... respectively.  
	New functions.
	(extend_h_i_d, init_h_i_d): Remove.
	(haifa_local_init, haifa_local_finish, sched_local_init, 
	sched_local_finish, sched_insns_init, sched_insns_finish): 
	New functions.
	(extend_all, add_to_speculative_block, init_before_recovery,
	create_check_block_twin): Use haifa_insns_init 
	instead of extend_global.
	(sched_bbs_init): New function.  Move logic from ... 
	(extend_bb): ... here.
	(add_block): Use common_sched_info instead of current_sched_info.
	Use sched_bbs_init.  Add stricter asserts.
	(fix_jump_moves, move_block_after_check, attach_life_info1): 
	Use common_sched_info.
	(init_glat): Remove.
	(init_glat_1): Rename to glat_init_1.
	(glat_init, sched_bbs_finish): New functions.
	(check_sched_flags): Use sched_deps_info.
	(sched_luid_extend, sched_luid_init, sched_luid_finish, 
	sched_insn_extend, sched_insn_init, sched_insns_finish,
	sched_bb_extend, sched_bb_init, sched_bb_finish, 
	sched_data_update, sched_data_finish): New functions.
	* lists.c (remove_free_INSN_LIST_node): New function.
	* modulo-sched.c: Include sched-deps.h.
	(issue_rate): Guard with #if 0.
	(sms_sched_info): Rename to sms_common_sched_info.
	(sms_sched_deps_info, sms_sched_info): New.
	(sms_schedule): Initialize them.  Call haifa_sched_init/finish.
	* opts.c (decode_options).  If optimize >=2, turn on selective
	scheduling.
	* params.def (PARAM_SELSCHED_VERBOSE, PARAM_SELSCHED_DUMP_CFG_FLAGS,
	PARAM_SELSCHED_MAX_LOOKAHEAD, PARAM_ALLOW_START, PARAM_ALLOW_STOP,
	PARAM_ALLOW_P, PARAM_REGION_START, PARAM_REGION_STOP, 
	PARAM_REGION_P): New parameters.
	* passes.c (init_optimization_passes): Add sel_sched pass.
	* recog.c (validate_replace_rtx_part): New function.
	* recog.h: Prototype it.
	* rtl.h (remove_free_INSN_LIST_NODE, debug_bb_n_slim, debug_bb_slim,
	print_rtl_slim): Add prototypes.
	(struct rtl_hooks <insn_added>): New RTL hook.
	(insn_added): New macro.
	* rtlhooks-def.h (RTL_HOOKS_INSN_ADDED): Define to NULL.
	Add to RTL_HOOKS_INITIALIZER.
	* sched-deps.c: Include sched-deps.h.
	(sched_deps_info): New.  Update all relevant uses of current_sched_info
	to use it.
	(d_i_d, h_d_i_d): New variables.
	({true, output, anti, spec, forward}_dependency_cache): Initialize 
	to NULL.
	(cur_max_luid, cur_insn, can_start_lhs_rhs_p): New static variables.
	(add_or_update_back_dep_1): Initialize present_dep_type.
	(fixup_sched_groups): Use add_dependence instead of 
	maybe_add_or_update_back_dep.
	(haifa_start_insn, haifa_finish_insn, haifa_note_reg_set,
	haifa_note_reg_clobber, haifa_note_reg_use, haifa_note_mem_dep,
	haifa_note_dep): New functions implementing dependence hooks for 
	the Haifa scheduler.
	(note_reg_use, note_reg_set, note_reg_clobber, note_mem_dep,
	note_dep): New macros.
	(ds_to_dt): New function.
	(sched_analyze_reg, sched_analyze_1, sched_analyze_2, 
	sched_analyze_insn): Update to use dependency hooks infrastructure.
	(deps_analyze_insn): New function.  Move part of logic from ... 
	(sched_analyze): ... here.  Also move some logic to ... 
	(deps_start_bb): ... here.  New function.  
	(add_forw_dep, delete_forw_dep): Guard use of INSN_DEP_COUNT with
	!SEL_SCHED_P.
	(sched_deps_local_init): New function.  Move code from ... 
	(init_dependency_caches): ... here.  
	(sched_deps_local_finish): New function.  Move code from ... 
	(free_dependency_caches): ... here.
	(init_deps_global, finish_deps_global): Adjust for use with 
	selective scheduling.
	(add_dependence): Make static.  Adjust for use of dependency hooks.
	(maybe_add_or_update_back_dep): New.
	(add_or_update_back_dep, add_or_update_back_forw_dep, 
	add_back_forw_dep): Adjust to use with selective scheduling.
	* sched-ebb.c: Include sched-deps.h.
	(debug_ebb_dependencies): New function.
	(init_ready_list): Use it.
	(ebb_print_insn): Indicate when an insn starts a new cycle.
	(contributes_to_priority, compute_jump_reg_dependencies): Add 
	ebb_ prefix to function names.
	(ebb_sched_deps_info, ebb_common_sched_info): New variables.
	(schedule_ebb): Initialize them.  Use remove_notes instead of 
	rm_other_notes.  Use haifa_local_init/finish.  
	(schedule_ebbs): Use haifa_sched_init/finish.
	* sched-int.h: Include basic-block.h.
	(sched_verbose_param, common_sched_info, sched_emulate_haifa_p,
	glat_start, glat_end, sched_max_uid, sched_last_basic_block,
	uid_to_luid, max_luid, sched_blocks, sched_insns): New prototypes.
	Prototype new functions in haifa-sched.c, sched-ebb.c, 
	and sched-vis.c.
	(enum sched_pass_id_t): New enumeration.
	(struct common_sched_info_def): New structure.
	(INSN_NEED_LUID_P, SEL_SCHED_P, INSN_LUID): New macros.
	(deps_t): New typedef.
	(current_sched_info): Change type to ... 
	(struct haifa_sched_info): ... this.  New structure.  Move 
	Haifa-specific fields from struct sched_info.
	(struct haifa_insn_data): Move dependency-related fields to 
	struct deps_insn_data.
	(INSN_PRIORITY, INSN_PRIORITY_KNOWN): Change to use d_i_d.
	(INSN_COST): Adjust for selective scheduling.
	Move sched-deps.c functions to sched-deps.h.
	* sched-rgn.c: Include cselib.h and sched-deps.h.
	(region, candidate, BB_TO_BLOCK, EBB_{FIRST,LAST}_BB, IS_VALID,
	IS_SPECULATIVE): Move to sched-rgn.h.
	(nr_regions, rgn_table, rgn_bb_table, block_to_bb, containing_rgn,
	current_nr_blocks, current_blocks, candidate_table, extend_rgns): 
	Make global.
	(debug_region, bb_in_region_p, dump_region_dot, 
	dump_region_dot_file, sched_rgn_estimate_number_of_insns): 
	New functions.	
	(find_single_block_region): Add ebbs_p parameter.
	(too_large, find_rgns, new_ready): Use comon_sched_info.
	(compute_trg_info): Make global.  Move initialization of 
	candidate_table, bblst_table, and edgelst_table from ... 
	(init_ready_list): ... here.
	(free_trg_info): New function.
	(check_live, update_live, contributes_to_priority): Make global.
	(rgn_common_sched_info, rgn_sched_deps_info,
	rgn_after_reload_sched_deps_info): New variables.
	(region_sched_info): Change type to struct haifa_sched_info.
	(ref_counts): New static variable. 	
	(add_branch_dependences): Use maybe_add_or_update_back_dep instead
	of add_dependence.
	(deps_join): New function.
	(propagate_deps): Use it.  New function.
	(free_rgn_deps, compute_priorities): New function.
	(sched_rgn_init, sched_rgn_finish): New functions.
	(schedule_region): Use them.
	(sched_rgn_local_preinit, sched_rgn_local_init, 
	sched_rgn_local_free, sched_rgn_local_finish): New functions.
	* sched-vis.c (print_value, print_pattern): Make global.
	(dump_insn_slim_1, print_rtl_slim, debug_bb_slim, 
	debug_bb_n_slim): New functions.
	* target-def.h (TARGET_SCHED_ALLOC_SCHED_CONTEXT, 
	TARGET_SCHED_INIT_SCHED_CONTEXT, TARGET_SCHED_SET_SCHED_CONTEXT, 
	TARGET_SCHED_CLEAR_SCHED_CONTEXT, TARGET_SCHED_FREE_SCHED_CONTEXT):
	New target hooks.  Initialize them to 0.
	* target.h (struct gcc_target): Add them.
	* timevar.def (TV_SEL_SCHED): New timevar.
	* tree-pass.h (pass_sel_sched): Prototype it.
	
	* Makefile.in (OBJS-common): Add selective scheduling object
	files. 
	(sel-sched.o, sel-sched-dump.o, sel-sched-ir.o): New entries.
	(SEL_SCHED_IR_H, SEL_SCHED_DUMP_H): New entries.
	(SCHED_INT_H): Add dependency on sched-deps.h.
	(sched-deps.o): Add sched-deps.h.
	(sched-rgn.o): Add $(SCHED_RGN_H).

	* config/ia64/ia64.opt (msel-sched-renaming, 
	msel-sched-substitution): New target-dependent flags.
	* config/ia64/ia64.c: Include sched-deps.h and sel-sched.h.
	(TARGET_SCHED_ALLOC_SCHED_CONTEXT, TARGET_SCHED_INIT_SCHED_CONTEXT,
	TARGET_SCHED_SET_SCHED_CONTEXT, TARGET_SCHED_CLEAR_SCHED_CONTEXT,
	TARGET_SCHED_FREE_SCHED_CONTEXT): Define new target hooks.
	(struct _ia64_sched_context): New structure.
	(ia64_sched_context_t): New typedef.
	(ia64_alloc_sched_context, ia64_init_sched_context, 
	ia64_set_sched_context, ia64_clear_sched_context,
	ia64_free_sched_context): New static functions.  Prototype them.
	(ia64_override_options): Set global selective scheduling flags 
	according to target-dependent flags.
	(dfa_state_size): Remove static declaration.
	(ia64_sched_init): Remove checks for !SCHED_GROUP_P after reload.
	(ia64_dfa_new_cycle): Assert that last_scheduled_insn is set when
	a group barrier is needed.  Fix vertical spacing.  Guard the code
	doing state transition with last_scheduled_insn check.
	(ia64_variable_issue): Change use of current_sched_info to 
	sched_deps_info.  Update comment.
	(ia64_h_i_d_extended): Ditto.	
	(ia64_mode_to_int): Check common_sched_info instead of *flags.
	(ia64_set_sched_flags): Ditto.
	(bundling): When shifting TImode from unimportant insns, ignore 
	also group barriers.  Assert that best state is found before 
	the backward bundling pass.
	(ia64_sched_finish, final_emit_insn_group_barriers): Fix formatting.
	(ia64_reorg): Wen flag_selective_scheduling, run the selective 
	scheduling pass instead of schedule_ebbs.
	* config/ia64/t-ia64 (ia64.o): Add dependency on sel-sched.h.

	* doc/invoke.texi: Document new flags and parameters.
	* doc/tm.texi: Document new target hooks.


Added:
    branches/sel-sched-branch/gcc/ChangeLog.sel-sched
    branches/sel-sched-branch/gcc/sched-deps.h
    branches/sel-sched-branch/gcc/sched-rgn.h
    branches/sel-sched-branch/gcc/sel-sched-dump.c
    branches/sel-sched-branch/gcc/sel-sched-dump.h
    branches/sel-sched-branch/gcc/sel-sched-ir.c
    branches/sel-sched-branch/gcc/sel-sched-ir.h
    branches/sel-sched-branch/gcc/sel-sched.c
    branches/sel-sched-branch/gcc/sel-sched.h
Modified:
    branches/sel-sched-branch/gcc/Makefile.in
    branches/sel-sched-branch/gcc/cfghooks.h
    branches/sel-sched-branch/gcc/cfgrtl.c
    branches/sel-sched-branch/gcc/common.opt
    branches/sel-sched-branch/gcc/config/ia64/ia64.c
    branches/sel-sched-branch/gcc/config/ia64/ia64.opt
    branches/sel-sched-branch/gcc/config/ia64/t-ia64
    branches/sel-sched-branch/gcc/ddg.c
    branches/sel-sched-branch/gcc/doc/invoke.texi
    branches/sel-sched-branch/gcc/doc/tm.texi
    branches/sel-sched-branch/gcc/emit-rtl.c
    branches/sel-sched-branch/gcc/haifa-sched.c
    branches/sel-sched-branch/gcc/lists.c
    branches/sel-sched-branch/gcc/modulo-sched.c
    branches/sel-sched-branch/gcc/opts.c
    branches/sel-sched-branch/gcc/params.def
    branches/sel-sched-branch/gcc/passes.c
    branches/sel-sched-branch/gcc/recog.c
    branches/sel-sched-branch/gcc/recog.h
    branches/sel-sched-branch/gcc/rtl.h
    branches/sel-sched-branch/gcc/rtlhooks-def.h
    branches/sel-sched-branch/gcc/sched-deps.c
    branches/sel-sched-branch/gcc/sched-ebb.c
    branches/sel-sched-branch/gcc/sched-int.h
    branches/sel-sched-branch/gcc/sched-rgn.c
    branches/sel-sched-branch/gcc/sched-vis.c
    branches/sel-sched-branch/gcc/target-def.h
    branches/sel-sched-branch/gcc/target.h
    branches/sel-sched-branch/gcc/timevar.def
    branches/sel-sched-branch/gcc/tree-pass.h


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