Commit ae2b9cb6 by Bernd Schmidt Committed by Bernd Schmidt

tree-pass.h (pass_reload): Declare.

	* tree-pass.h (pass_reload): Declare.
	* ira.c (overall_cost_before, saved_flag_ira_share_spill_slots):
	New global variables, moved out of ira.
	(do_reload): New static function, split off from the second half
	of ...
	(ira): ... here.
	(gate_ira): Remove.
	(pass_ira): Use TV_IRA, set gate to NULL, and set flags to
	TODO_dump_func.
	(rest_of_handle_reload): New static function.
	(pass_reload): New.

From-SVN: r182624
parent 95c64830
2011-12-22 Bernd Schmidt <bernds@codesourcery.com>
* tree-pass.h (pass_reload): Declare.
* ira.c (overall_cost_before, saved_flag_ira_share_spill_slots):
New global variables, moved out of ira.
(do_reload): New static function, split off from the second half
of ...
(ira): ... here.
(gate_ira): Remove.
(pass_ira): Use TV_IRA, set gate to NULL, and set flags to
TODO_dump_func.
(rest_of_handle_reload): New static function.
(pass_reload): New.
2011-12-22 Uros Bizjak <ubizjak@gmail.com> 2011-12-22 Uros Bizjak <ubizjak@gmail.com>
* common/config/i386/i386-common.c (ix86_option_optimization_table): * common/config/i386/i386-common.c (ix86_option_optimization_table):
...@@ -406,11 +406,12 @@ int ira_spilled_reg_stack_slots_num; ...@@ -406,11 +406,12 @@ int ira_spilled_reg_stack_slots_num;
stack slots used in current function so far. */ stack slots used in current function so far. */
struct ira_spilled_reg_stack_slot *ira_spilled_reg_stack_slots; struct ira_spilled_reg_stack_slot *ira_spilled_reg_stack_slots;
/* Correspondingly overall cost of the allocation, cost of the /* Correspondingly overall cost of the allocation, overall cost before
allocnos assigned to hard-registers, cost of the allocnos assigned reload, cost of the allocnos assigned to hard-registers, cost of
to memory, cost of loads, stores and register move insns generated the allocnos assigned to memory, cost of loads, stores and register
for pseudo-register live range splitting (see ira-emit.c). */ move insns generated for pseudo-register live range splitting (see
int ira_overall_cost; ira-emit.c). */
int ira_overall_cost, overall_cost_before;
int ira_reg_cost, ira_mem_cost; int ira_reg_cost, ira_mem_cost;
int ira_load_cost, ira_store_cost, ira_shuffle_cost; int ira_load_cost, ira_store_cost, ira_shuffle_cost;
int ira_move_loops_num, ira_additional_jumps_num; int ira_move_loops_num, ira_additional_jumps_num;
...@@ -3521,19 +3522,17 @@ struct loops ira_loops; ...@@ -3521,19 +3522,17 @@ struct loops ira_loops;
mode or when the conflict table is too big. */ mode or when the conflict table is too big. */
bool ira_conflicts_p; bool ira_conflicts_p;
/* Saved between IRA and reload. */
static int saved_flag_ira_share_spill_slots;
/* This is the main entry of IRA. */ /* This is the main entry of IRA. */
static void static void
ira (FILE *f) ira (FILE *f)
{ {
int overall_cost_before, allocated_reg_info_size; int allocated_reg_info_size;
bool loops_p; bool loops_p;
int max_regno_before_ira, ira_max_point_before_emit; int max_regno_before_ira, ira_max_point_before_emit;
int rebuild_p; int rebuild_p;
int saved_flag_ira_share_spill_slots;
basic_block bb;
bool need_dce;
timevar_push (TV_IRA);
if (flag_caller_saves) if (flag_caller_saves)
init_caller_save (); init_caller_save ();
...@@ -3715,17 +3714,22 @@ ira (FILE *f) ...@@ -3715,17 +3714,22 @@ ira (FILE *f)
max_regno * sizeof (struct ira_spilled_reg_stack_slot)); max_regno * sizeof (struct ira_spilled_reg_stack_slot));
} }
allocate_initial_values (reg_equivs); allocate_initial_values (reg_equivs);
}
timevar_pop (TV_IRA); static void
do_reload (void)
{
basic_block bb;
bool need_dce;
if (flag_ira_verbose < 10 && dump_file)
ira_dump_file = dump_file;
timevar_push (TV_RELOAD);
df_set_flags (DF_NO_INSN_RESCAN); df_set_flags (DF_NO_INSN_RESCAN);
build_insn_chain (); build_insn_chain ();
need_dce = reload (get_insns (), ira_conflicts_p); need_dce = reload (get_insns (), ira_conflicts_p);
timevar_pop (TV_RELOAD);
timevar_push (TV_IRA); timevar_push (TV_IRA);
if (ira_conflicts_p) if (ira_conflicts_p)
...@@ -3733,7 +3737,6 @@ ira (FILE *f) ...@@ -3733,7 +3737,6 @@ ira (FILE *f)
ira_free (ira_spilled_reg_stack_slots); ira_free (ira_spilled_reg_stack_slots);
ira_finish_assign (); ira_finish_assign ();
} }
if (internal_flag_ira_verbose > 0 && ira_dump_file != NULL if (internal_flag_ira_verbose > 0 && ira_dump_file != NULL
&& overall_cost_before != ira_overall_cost) && overall_cost_before != ira_overall_cost)
...@@ -3783,14 +3786,6 @@ ira (FILE *f) ...@@ -3783,14 +3786,6 @@ ira (FILE *f)
timevar_pop (TV_IRA); timevar_pop (TV_IRA);
} }
static bool
gate_ira (void)
{
return true;
}
/* Run the integrated register allocator. */ /* Run the integrated register allocator. */
static unsigned int static unsigned int
rest_of_handle_ira (void) rest_of_handle_ira (void)
...@@ -3804,16 +3799,42 @@ struct rtl_opt_pass pass_ira = ...@@ -3804,16 +3799,42 @@ struct rtl_opt_pass pass_ira =
{ {
RTL_PASS, RTL_PASS,
"ira", /* name */ "ira", /* name */
gate_ira, /* gate */ NULL, /* gate */
rest_of_handle_ira, /* execute */ rest_of_handle_ira, /* execute */
NULL, /* sub */ NULL, /* sub */
NULL, /* next */ NULL, /* next */
0, /* static_pass_number */ 0, /* static_pass_number */
TV_NONE, /* tv_id */ TV_IRA, /* tv_id */
0, /* properties_required */
0, /* properties_provided */
0, /* properties_destroyed */
0, /* todo_flags_start */
TODO_dump_func /* todo_flags_finish */
}
};
static unsigned int
rest_of_handle_reload (void)
{
do_reload ();
return 0;
}
struct rtl_opt_pass pass_reload =
{
{
RTL_PASS,
"reload", /* name */
NULL, /* gate */
rest_of_handle_reload, /* execute */
NULL, /* sub */
NULL, /* next */
0, /* static_pass_number */
TV_RELOAD, /* tv_id */
0, /* properties_required */ 0, /* properties_required */
0, /* properties_provided */ 0, /* properties_provided */
0, /* properties_destroyed */ 0, /* properties_destroyed */
0, /* todo_flags_start */ 0, /* todo_flags_start */
TODO_ggc_collect /* todo_flags_finish */ TODO_dump_func | TODO_ggc_collect /* todo_flags_finish */
} }
}; };
...@@ -1484,6 +1484,7 @@ init_optimization_passes (void) ...@@ -1484,6 +1484,7 @@ init_optimization_passes (void)
NEXT_PASS (pass_sms); NEXT_PASS (pass_sms);
NEXT_PASS (pass_sched); NEXT_PASS (pass_sched);
NEXT_PASS (pass_ira); NEXT_PASS (pass_ira);
NEXT_PASS (pass_reload);
NEXT_PASS (pass_postreload); NEXT_PASS (pass_postreload);
{ {
struct opt_pass **p = &pass_postreload.pass.sub; struct opt_pass **p = &pass_postreload.pass.sub;
......
...@@ -541,6 +541,7 @@ extern struct rtl_opt_pass pass_mode_switching; ...@@ -541,6 +541,7 @@ extern struct rtl_opt_pass pass_mode_switching;
extern struct rtl_opt_pass pass_sms; extern struct rtl_opt_pass pass_sms;
extern struct rtl_opt_pass pass_sched; extern struct rtl_opt_pass pass_sched;
extern struct rtl_opt_pass pass_ira; extern struct rtl_opt_pass pass_ira;
extern struct rtl_opt_pass pass_reload;
extern struct rtl_opt_pass pass_postreload; extern struct rtl_opt_pass pass_postreload;
extern struct rtl_opt_pass pass_clean_state; extern struct rtl_opt_pass pass_clean_state;
extern struct rtl_opt_pass pass_branch_prob; extern struct rtl_opt_pass pass_branch_prob;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment