Commit 2af2dbdc by Vladimir Makarov Committed by Vladimir Makarov

tm.texi (TARGET_IRA_COVER_CLASSES): Modify description.

2008-01-29  Vladimir Makarov  <vmakarov@redhat.com>

	* doc/tm.texi (TARGET_IRA_COVER_CLASSES): Modify description.
	* doc/passes.texi: Remove entries about regclass, local-alloc, and
	global.  Modify entries about regmove and IRA.

	* ra-conflict.c: Remove the file.

	* reload.c (push_reload, find_dummy_reload): Remove flag_ira.

	* tree-pass.h (pass_local_alloc, pass_global_alloc): Remove.
	(pass_regclass_init): Rename to pass_reginfo_init.

	* cfgloopanal.c (estimate_reg_pressure_cost): Remove flag_ira.

	* toplev.h (flag_ira): Remove.

	* caller-save.c (setup_save_areas): Remove flag_ira.

	* ira-color.c (ira_reuse_stack_slot, ira_mark_new_stack_slot):
	Ditto.

	* global.c: Remove the file.

	* opts.c: (decode_options): Remove flag_ira.

	* hard-reg-set.h (losing_caller_save_reg_set): Remove.

	* regmove.c: Modify file description.
	(find_use_as_address, try_auto_increment): Define them only if
	AUTO_INC_DEC is defined.
	(replacement_quality, replace_in_call_usage, fixup_match_1,
	stable_and_no_regs_but_for_p): Remove.
	(reg_set_in_bb): Make it static.
	(regmove_optimize): Remove flag_ira and code which worked for
	!flag_ira.

	* local-alloc.c: Remove the file.

	* common.opt (fira): Remove.

	* ira.c: Include except.h.
	(eliminable_regset): Move from global.c.
	(mark_elimination): Ditto.  Remove flag_ira.
	(reg_renumber, struct equivalence, reg_equiv, equiv_mem,
	equiv_mem_modified, validate_equiv_mem_from_store,
	validate_equiv_mem, equiv_init_varies_p, equiv_init_movable_p,
	contains_replace_regs, memref_referenced_p, memref_used_between_p,
	no_equiv, recorded_label_ref): Move from local-alloc.c.
	(update_equiv_regs): Ditto.  Make it static.
	(print_insn_chain, print_insn_chains): Move it from global.c.
	pseudo_for_reload_consideration_p): Ditto.  Remove flag_ira.
	(build_insn_chain): Ditto.  Make it static.
	(ra_init_live_subregs): Move from ra-conflict.c.  Make it static.
	Rename to init_live_subregs.
	(gate_ira): Remove flag_ira.

	* regclass.c: Rename reginfo.c.  Change file description.
	(FORBIDDEN_INC_DEC_CLASSES): Remove.
	(reg_class_superclasses, forbidden_inc_dec_class, in_inc_dec):
	Remove.
	(init_reg_sets_1): Remove code for evaluation of
	reg_class_superclasses and losing_caller_save_reg_set.
	(init_regs): Remove init_reg_autoinc.
	(struct costs, costs, init_cost, ok_for_index_p_nonstrict,
	ok_for_base_p_nonstrict): Remove.
	(regclass_init): Rename to reginfo_init.  Don't initialize
	init_cost.
	(pass_regclass_init): Rename to pass_reginfo_init.  Modify
	corresponding entries.
	(dump_regclass, record_operand_costs, scan_one_insn,
	init_reg_autoinc, regclass, record_reg_classes, copy_cost,
	record_address_regs, auto_inc_dec_reg_p): Remove.
	(gt-regclass.h): Rename to gt-reginfo.h.

	* rtl.h (dump_global_regs, retry_global_alloc,
	build_insn_chain, dump_local_alloc, update_equiv_regs):
	Remove.

	* Makefile.in (RA_H): Remove.
	(OBJS-common): Remove global.o, local-alloc.o, and ra-conflict.o.
	Rename regclass.o to reginfo.o.
	(regclass.o): Rename to reginfo.o.  Rename gt-regclass.h to
	gt-reginfo.h.
	(global.o, local-alloc.o, ra-conflict.o): Remove entries.
	(GTFILES): Rename regclass.c to	reginfo.c.

	* passes.c (init_optimization_passes): Remove pass_local_alloc and
	pass_global_alloc.  Rename pass_regclass_init to
	pass_reginfo_init.

	* reload1.c (compute_use_by_pseudos, reload, count_pseudo,
	count_spilled_pseudo, find_reg, alter_reg, delete_output_reload):
	Remove flag_ira.
	(finish_spills): Ditto.  Remove code for !flga_ira.

From-SVN: r143757
parent 00b251a0
2008-01-29 Vladimir Makarov <vmakarov@redhat.com>
* doc/tm.texi (TARGET_IRA_COVER_CLASSES): Modify description.
* doc/passes.texi: Remove entries about regclass, local-alloc, and
global. Modify entries about regmove and IRA.
* ra-conflict.c: Remove the file.
* reload.c (push_reload, find_dummy_reload): Remove flag_ira.
* tree-pass.h (pass_local_alloc, pass_global_alloc): Remove.
(pass_regclass_init): Rename to pass_reginfo_init.
* cfgloopanal.c (estimate_reg_pressure_cost): Remove flag_ira.
* toplev.h (flag_ira): Remove.
* caller-save.c (setup_save_areas): Remove flag_ira.
* ira-color.c (ira_reuse_stack_slot, ira_mark_new_stack_slot):
Ditto.
* global.c: Remove the file.
* opts.c: (decode_options): Remove flag_ira.
* hard-reg-set.h (losing_caller_save_reg_set): Remove.
* regmove.c: Modify file description.
(find_use_as_address, try_auto_increment): Define them only if
AUTO_INC_DEC is defined.
(replacement_quality, replace_in_call_usage, fixup_match_1,
stable_and_no_regs_but_for_p): Remove.
(reg_set_in_bb): Make it static.
(regmove_optimize): Remove flag_ira and code which worked for
!flag_ira.
* local-alloc.c: Remove the file.
* common.opt (fira): Remove.
* ira.c: Include except.h.
(eliminable_regset): Move from global.c.
(mark_elimination): Ditto. Remove flag_ira.
(reg_renumber, struct equivalence, reg_equiv, equiv_mem,
equiv_mem_modified, validate_equiv_mem_from_store,
validate_equiv_mem, equiv_init_varies_p, equiv_init_movable_p,
contains_replace_regs, memref_referenced_p, memref_used_between_p,
no_equiv, recorded_label_ref): Move from local-alloc.c.
(update_equiv_regs): Ditto. Make it static.
(print_insn_chain, print_insn_chains): Move it from global.c.
pseudo_for_reload_consideration_p): Ditto. Remove flag_ira.
(build_insn_chain): Ditto. Make it static.
(ra_init_live_subregs): Move from ra-conflict.c. Make it static.
Rename to init_live_subregs.
(gate_ira): Remove flag_ira.
* regclass.c: Rename reginfo.c. Change file description.
(FORBIDDEN_INC_DEC_CLASSES): Remove.
(reg_class_superclasses, forbidden_inc_dec_class, in_inc_dec):
Remove.
(init_reg_sets_1): Remove code for evaluation of
reg_class_superclasses and losing_caller_save_reg_set.
(init_regs): Remove init_reg_autoinc.
(struct costs, costs, init_cost, ok_for_index_p_nonstrict,
ok_for_base_p_nonstrict): Remove.
(regclass_init): Rename to reginfo_init. Don't initialize
init_cost.
(pass_regclass_init): Rename to pass_reginfo_init. Modify
corresponding entries.
(dump_regclass, record_operand_costs, scan_one_insn,
init_reg_autoinc, regclass, record_reg_classes, copy_cost,
record_address_regs, auto_inc_dec_reg_p): Remove.
(gt-regclass.h): Rename to gt-reginfo.h.
* rtl.h (dump_global_regs, retry_global_alloc,
build_insn_chain, dump_local_alloc, update_equiv_regs):
Remove.
* Makefile.in (RA_H): Remove.
(OBJS-common): Remove global.o, local-alloc.o, and ra-conflict.o.
Rename regclass.o to reginfo.o.
(regclass.o): Rename to reginfo.o. Rename gt-regclass.h to
gt-reginfo.h.
(global.o, local-alloc.o, ra-conflict.o): Remove entries.
(GTFILES): Rename regclass.c to reginfo.c.
* passes.c (init_optimization_passes): Remove pass_local_alloc and
pass_global_alloc. Rename pass_regclass_init to
pass_reginfo_init.
* reload1.c (compute_use_by_pseudos, reload, count_pseudo,
count_spilled_pseudo, find_reg, alter_reg, delete_output_reload):
Remove flag_ira.
(finish_spills): Ditto. Remove code for !flga_ira.
2009-01-29 Kenneth Zadeck <zadeck@naturalbridge.com> 2009-01-29 Kenneth Zadeck <zadeck@naturalbridge.com>
PR middle-end/35854 PR middle-end/35854
......
...@@ -824,7 +824,6 @@ FUNCTION_H = function.h $(TREE_H) $(HASHTAB_H) varray.h ...@@ -824,7 +824,6 @@ FUNCTION_H = function.h $(TREE_H) $(HASHTAB_H) varray.h
EXPR_H = expr.h insn-config.h $(FUNCTION_H) $(RTL_H) $(FLAGS_H) $(TREE_H) $(MACHMODE_H) $(EMIT_RTL_H) EXPR_H = expr.h insn-config.h $(FUNCTION_H) $(RTL_H) $(FLAGS_H) $(TREE_H) $(MACHMODE_H) $(EMIT_RTL_H)
OPTABS_H = optabs.h insn-codes.h OPTABS_H = optabs.h insn-codes.h
REGS_H = regs.h varray.h $(MACHMODE_H) $(OBSTACK_H) $(BASIC_BLOCK_H) $(FUNCTION_H) REGS_H = regs.h varray.h $(MACHMODE_H) $(OBSTACK_H) $(BASIC_BLOCK_H) $(FUNCTION_H)
RA_H = ra.h $(REGS_H)
RESOURCE_H = resource.h hard-reg-set.h RESOURCE_H = resource.h hard-reg-set.h
SCHED_INT_H = sched-int.h $(INSN_ATTR_H) $(BASIC_BLOCK_H) $(RTL_H) $(DF_H) vecprim.h SCHED_INT_H = sched-int.h $(INSN_ATTR_H) $(BASIC_BLOCK_H) $(RTL_H) $(DF_H) vecprim.h
SEL_SCHED_IR_H = sel-sched-ir.h $(INSN_ATTR_H) $(BASIC_BLOCK_H) $(RTL_H) \ SEL_SCHED_IR_H = sel-sched-ir.h $(INSN_ATTR_H) $(BASIC_BLOCK_H) $(RTL_H) \
...@@ -1115,7 +1114,6 @@ OBJS-common = \ ...@@ -1115,7 +1114,6 @@ OBJS-common = \
gimple-low.o \ gimple-low.o \
gimple-pretty-print.o \ gimple-pretty-print.o \
gimplify.o \ gimplify.o \
global.o \
graph.o \ graph.o \
graphds.o \ graphds.o \
graphite.o \ graphite.o \
...@@ -1140,7 +1138,6 @@ OBJS-common = \ ...@@ -1140,7 +1138,6 @@ OBJS-common = \
langhooks.o \ langhooks.o \
lcm.o \ lcm.o \
lists.o \ lists.o \
local-alloc.o \
loop-doloop.o \ loop-doloop.o \
loop-init.o \ loop-init.o \
loop-invariant.o \ loop-invariant.o \
...@@ -1167,11 +1164,10 @@ OBJS-common = \ ...@@ -1167,11 +1164,10 @@ OBJS-common = \
print-rtl.o \ print-rtl.o \
print-tree.o \ print-tree.o \
profile.o \ profile.o \
ra-conflict.o \
real.o \ real.o \
recog.o \ recog.o \
reg-stack.o \ reg-stack.o \
regclass.o \ reginfo.o \
regmove.o \ regmove.o \
regrename.o \ regrename.o \
regstat.o \ regstat.o \
...@@ -2842,25 +2838,13 @@ combine.o : combine.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \ ...@@ -2842,25 +2838,13 @@ combine.o : combine.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
rtlhooks-def.h $(BASIC_BLOCK_H) $(RECOG_H) $(REAL_H) hard-reg-set.h \ rtlhooks-def.h $(BASIC_BLOCK_H) $(RECOG_H) $(REAL_H) hard-reg-set.h \
$(TOPLEV_H) $(TM_P_H) $(TREE_H) $(TARGET_H) output.h $(PARAMS_H) $(OPTABS_H) \ $(TOPLEV_H) $(TM_P_H) $(TREE_H) $(TARGET_H) output.h $(PARAMS_H) $(OPTABS_H) \
insn-codes.h $(TIMEVAR_H) tree-pass.h $(DF_H) vecprim.h $(CGRAPH_H) insn-codes.h $(TIMEVAR_H) tree-pass.h $(DF_H) vecprim.h $(CGRAPH_H)
regclass.o : regclass.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \ reginfo.o : reginfo.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
hard-reg-set.h $(FLAGS_H) $(BASIC_BLOCK_H) addresses.h $(REGS_H) insn-config.h \ hard-reg-set.h $(FLAGS_H) $(BASIC_BLOCK_H) addresses.h $(REGS_H) insn-config.h \
$(RECOG_H) reload.h $(REAL_H) $(TOPLEV_H) $(FUNCTION_H) output.h $(GGC_H) \ $(RECOG_H) reload.h $(REAL_H) $(TOPLEV_H) $(FUNCTION_H) output.h $(GGC_H) \
$(TM_P_H) $(EXPR_H) $(TIMEVAR_H) gt-regclass.h $(HASHTAB_H) \ $(TM_P_H) $(EXPR_H) $(TIMEVAR_H) gt-reginfo.h $(HASHTAB_H) \
$(TARGET_H) tree-pass.h $(DF_H) ira.h $(TARGET_H) tree-pass.h $(DF_H) ira.h
local-alloc.o : local-alloc.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
$(RTL_H) $(FLAGS_H) $(REGS_H) hard-reg-set.h insn-config.h $(RECOG_H) \
output.h $(FUNCTION_H) $(INSN_ATTR_H) $(TOPLEV_H) except.h reload.h $(TM_P_H) \
$(GGC_H) $(INTEGRATE_H) $(TIMEVAR_H) tree-pass.h $(DF_H) $(DBGCNT_H)
bitmap.o : bitmap.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \ bitmap.o : bitmap.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
$(FLAGS_H) $(GGC_H) gt-bitmap.h $(BITMAP_H) $(OBSTACK_H) $(HASHTAB_H) $(FLAGS_H) $(GGC_H) gt-bitmap.h $(BITMAP_H) $(OBSTACK_H) $(HASHTAB_H)
global.o : global.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
$(FLAGS_H) reload.h $(FUNCTION_H) $(RECOG_H) $(REGS_H) hard-reg-set.h \
insn-config.h output.h $(TOPLEV_H) $(TM_P_H) $(MACHMODE_H) tree-pass.h \
$(TIMEVAR_H) vecprim.h $(DF_H) $(DBGCNT_H) $(RA_H) ira.h
ra-conflict.o : ra-conflict.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
$(FLAGS_H) reload.h $(FUNCTION_H) $(RECOG_H) $(REGS_H) hard-reg-set.h \
insn-config.h output.h $(TOPLEV_H) $(TM_P_H) $(MACHMODE_H) tree-pass.h \
$(TIMEVAR_H) vecprim.h $(DF_H) $(RA_H) sbitmap.h sparseset.h
varray.o : varray.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(GGC_H) \ varray.o : varray.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(GGC_H) \
$(HASHTAB_H) $(BCONFIG_H) $(VARRAY_H) $(TOPLEV_H) $(HASHTAB_H) $(BCONFIG_H) $(VARRAY_H) $(TOPLEV_H)
vec.o : vec.c $(CONFIG_H) $(SYSTEM_H) coretypes.h vec.h $(GGC_H) \ vec.o : vec.c $(CONFIG_H) $(SYSTEM_H) coretypes.h vec.h $(GGC_H) \
...@@ -3303,7 +3287,7 @@ GTFILES = $(CPP_ID_DATA_H) $(srcdir)/input.h $(srcdir)/coretypes.h \ ...@@ -3303,7 +3287,7 @@ GTFILES = $(CPP_ID_DATA_H) $(srcdir)/input.h $(srcdir)/coretypes.h \
$(srcdir)/expr.h \ $(srcdir)/expr.h \
$(srcdir)/function.c $(srcdir)/except.h \ $(srcdir)/function.c $(srcdir)/except.h \
$(srcdir)/gcse.c $(srcdir)/integrate.c $(srcdir)/lists.c $(srcdir)/optabs.c \ $(srcdir)/gcse.c $(srcdir)/integrate.c $(srcdir)/lists.c $(srcdir)/optabs.c \
$(srcdir)/profile.c $(srcdir)/regclass.c $(srcdir)/mcf.c \ $(srcdir)/profile.c $(srcdir)/reginfo.c $(srcdir)/mcf.c \
$(srcdir)/reg-stack.c $(srcdir)/cfglayout.c $(srcdir)/cfglayout.h \ $(srcdir)/reg-stack.c $(srcdir)/cfglayout.c $(srcdir)/cfglayout.h \
$(srcdir)/sdbout.c $(srcdir)/stor-layout.c \ $(srcdir)/sdbout.c $(srcdir)/stor-layout.c \
$(srcdir)/stringpool.c $(srcdir)/tree.c $(srcdir)/varasm.c \ $(srcdir)/stringpool.c $(srcdir)/tree.c $(srcdir)/varasm.c \
......
...@@ -448,7 +448,7 @@ setup_save_areas (void) ...@@ -448,7 +448,7 @@ setup_save_areas (void)
SET_HARD_REG_BIT (hard_regs_used, r); SET_HARD_REG_BIT (hard_regs_used, r);
} }
if (flag_ira && optimize && flag_ira_share_save_slots) if (optimize && flag_ira_share_save_slots)
{ {
rtx insn, slot; rtx insn, slot;
struct insn_chain *chain, *next; struct insn_chain *chain, *next;
......
...@@ -396,8 +396,8 @@ estimate_reg_pressure_cost (unsigned n_new, unsigned n_old, bool speed) ...@@ -396,8 +396,8 @@ estimate_reg_pressure_cost (unsigned n_new, unsigned n_old, bool speed)
one. */ one. */
cost = target_spill_cost [speed] * n_new; cost = target_spill_cost [speed] * n_new;
if (optimize && flag_ira && (flag_ira_region == IRA_REGION_ALL if (optimize && (flag_ira_region == IRA_REGION_ALL
|| flag_ira_region == IRA_REGION_MIXED) || flag_ira_region == IRA_REGION_MIXED)
&& number_of_loops () <= (unsigned) IRA_MAX_LOOPS_NUM) && number_of_loops () <= (unsigned) IRA_MAX_LOOPS_NUM)
/* IRA regional allocation deals with high register pressure /* IRA regional allocation deals with high register pressure
better. So decrease the cost (to do more accurate the cost better. So decrease the cost (to do more accurate the cost
......
...@@ -679,10 +679,6 @@ Common Report Var(flag_ipa_struct_reorg) ...@@ -679,10 +679,6 @@ Common Report Var(flag_ipa_struct_reorg)
Perform structure layout optimizations based Perform structure layout optimizations based
on profiling information. on profiling information.
fira
Common Report Var(flag_ira) Init(0)
Use integrated register allocator.
fira-algorithm= fira-algorithm=
Common Joined RejectNegative Common Joined RejectNegative
-fira-algorithm=[CB|priority] Set the used IRA algorithm -fira-algorithm=[CB|priority] Set the used IRA algorithm
......
...@@ -826,24 +826,12 @@ them on the stack. This is done in several subpasses: ...@@ -826,24 +826,12 @@ them on the stack. This is done in several subpasses:
@itemize @bullet @itemize @bullet
@item @item
Register class preferencing. The RTL code is scanned to find out Register move optimizations. This pass makes some simple RTL code
which register class is best for each pseudo register. The source transformations which improve the subsequent register allocation. The
file is @file{regclass.c}. source file is @file{regmove.c}.
@item @item
Local register allocation. This pass allocates hard registers to The integrated register allocator (@acronym{IRA}). It is called
pseudo registers that are used only within one basic block. Because
the basic block is linear, it can use fast and powerful techniques to
do a decent job. The source is located in @file{local-alloc.c}.
@item
Global register allocation. This pass allocates hard registers for
the remaining pseudo registers (those whose life spans are not
contained in one basic block). The pass is located in @file{global.c}.
@item
The optional integrated register allocator (@acronym{IRA}). It can be
used instead of the local and global allocator. It is called
integrated because coalescing, register live range splitting, and hard integrated because coalescing, register live range splitting, and hard
register preferencing are done on-the-fly during coloring. It also register preferencing are done on-the-fly during coloring. It also
has better integration with the reload pass. Pseudo-registers spilled has better integration with the reload pass. Pseudo-registers spilled
......
...@@ -601,9 +601,6 @@ extern char call_really_used_regs[]; ...@@ -601,9 +601,6 @@ extern char call_really_used_regs[];
extern HARD_REG_SET call_used_reg_set; extern HARD_REG_SET call_used_reg_set;
/* Registers that we don't want to caller save. */
extern HARD_REG_SET losing_caller_save_reg_set;
/* Indexed by hard register number, contains 1 for registers that are /* Indexed by hard register number, contains 1 for registers that are
fixed use -- i.e. in fixed_regs -- or a function value return register fixed use -- i.e. in fixed_regs -- or a function value return register
or TARGET_STRUCT_VALUE_RTX or STATIC_CHAIN_REGNUM. These are the or TARGET_STRUCT_VALUE_RTX or STATIC_CHAIN_REGNUM. These are the
......
...@@ -2962,7 +2962,7 @@ ira_reuse_stack_slot (int regno, unsigned int inherent_size, ...@@ -2962,7 +2962,7 @@ ira_reuse_stack_slot (int regno, unsigned int inherent_size,
bitmap_iterator bi; bitmap_iterator bi;
struct ira_spilled_reg_stack_slot *slot = NULL; struct ira_spilled_reg_stack_slot *slot = NULL;
ira_assert (flag_ira && inherent_size == PSEUDO_REGNO_BYTES (regno) ira_assert (inherent_size == PSEUDO_REGNO_BYTES (regno)
&& inherent_size <= total_size && inherent_size <= total_size
&& ALLOCNO_HARD_REGNO (allocno) < 0); && ALLOCNO_HARD_REGNO (allocno) < 0);
if (! flag_ira_share_spill_slots) if (! flag_ira_share_spill_slots)
...@@ -3074,7 +3074,7 @@ ira_mark_new_stack_slot (rtx x, int regno, unsigned int total_size) ...@@ -3074,7 +3074,7 @@ ira_mark_new_stack_slot (rtx x, int regno, unsigned int total_size)
int slot_num; int slot_num;
ira_allocno_t allocno; ira_allocno_t allocno;
ira_assert (flag_ira && PSEUDO_REGNO_BYTES (regno) <= total_size); ira_assert (PSEUDO_REGNO_BYTES (regno) <= total_size);
allocno = ira_regno_allocno_map[regno]; allocno = ira_regno_allocno_map[regno];
slot_num = -ALLOCNO_HARD_REGNO (allocno) - 2; slot_num = -ALLOCNO_HARD_REGNO (allocno) - 2;
if (slot_num == -1) if (slot_num == -1)
......
...@@ -870,7 +870,6 @@ decode_options (unsigned int argc, const char **argv) ...@@ -870,7 +870,6 @@ decode_options (unsigned int argc, const char **argv)
} }
} }
flag_ira = 1;
/* Use priority coloring if cover classes is not defined for the /* Use priority coloring if cover classes is not defined for the
target. */ target. */
if (targetm.ira_cover_classes == NULL) if (targetm.ira_cover_classes == NULL)
...@@ -1098,7 +1097,7 @@ decode_options (unsigned int argc, const char **argv) ...@@ -1098,7 +1097,7 @@ decode_options (unsigned int argc, const char **argv)
if (!flag_sel_sched_pipelining) if (!flag_sel_sched_pipelining)
flag_sel_sched_pipelining_outer_loops = 0; flag_sel_sched_pipelining_outer_loops = 0;
if (flag_ira && !targetm.ira_cover_classes if (!targetm.ira_cover_classes
&& flag_ira_algorithm == IRA_ALGORITHM_CB) && flag_ira_algorithm == IRA_ALGORITHM_CB)
{ {
inform (input_location, inform (input_location,
......
...@@ -749,7 +749,7 @@ init_optimization_passes (void) ...@@ -749,7 +749,7 @@ init_optimization_passes (void)
NEXT_PASS (pass_cse2); NEXT_PASS (pass_cse2);
NEXT_PASS (pass_rtl_dse1); NEXT_PASS (pass_rtl_dse1);
NEXT_PASS (pass_rtl_fwprop_addr); NEXT_PASS (pass_rtl_fwprop_addr);
NEXT_PASS (pass_regclass_init); NEXT_PASS (pass_reginfo_init);
NEXT_PASS (pass_inc_dec); NEXT_PASS (pass_inc_dec);
NEXT_PASS (pass_initialize_regs); NEXT_PASS (pass_initialize_regs);
NEXT_PASS (pass_outof_cfg_layout_mode); NEXT_PASS (pass_outof_cfg_layout_mode);
...@@ -768,8 +768,6 @@ init_optimization_passes (void) ...@@ -768,8 +768,6 @@ init_optimization_passes (void)
NEXT_PASS (pass_sms); NEXT_PASS (pass_sms);
NEXT_PASS (pass_sched); NEXT_PASS (pass_sched);
NEXT_PASS (pass_subregs_of_mode_init); NEXT_PASS (pass_subregs_of_mode_init);
NEXT_PASS (pass_local_alloc);
NEXT_PASS (pass_global_alloc);
NEXT_PASS (pass_ira); NEXT_PASS (pass_ira);
NEXT_PASS (pass_subregs_of_mode_finish); NEXT_PASS (pass_subregs_of_mode_finish);
NEXT_PASS (pass_postreload); NEXT_PASS (pass_postreload);
......
...@@ -1549,9 +1549,7 @@ push_reload (rtx in, rtx out, rtx *inloc, rtx *outloc, ...@@ -1549,9 +1549,7 @@ push_reload (rtx in, rtx out, rtx *inloc, rtx *outloc,
&& reg_mentioned_p (XEXP (note, 0), in) && reg_mentioned_p (XEXP (note, 0), in)
/* Check that a former pseudo is valid; see find_dummy_reload. */ /* Check that a former pseudo is valid; see find_dummy_reload. */
&& (ORIGINAL_REGNO (XEXP (note, 0)) < FIRST_PSEUDO_REGISTER && (ORIGINAL_REGNO (XEXP (note, 0)) < FIRST_PSEUDO_REGISTER
|| (! bitmap_bit_p (flag_ira || (! bitmap_bit_p (DF_LR_OUT (ENTRY_BLOCK_PTR),
? DF_LR_OUT (ENTRY_BLOCK_PTR)
: DF_LIVE_OUT (ENTRY_BLOCK_PTR),
ORIGINAL_REGNO (XEXP (note, 0))) ORIGINAL_REGNO (XEXP (note, 0)))
&& hard_regno_nregs[regno][GET_MODE (XEXP (note, 0))] == 1)) && hard_regno_nregs[regno][GET_MODE (XEXP (note, 0))] == 1))
&& ! refers_to_regno_for_reload_p (regno, && ! refers_to_regno_for_reload_p (regno,
...@@ -2029,9 +2027,7 @@ find_dummy_reload (rtx real_in, rtx real_out, rtx *inloc, rtx *outloc, ...@@ -2029,9 +2027,7 @@ find_dummy_reload (rtx real_in, rtx real_out, rtx *inloc, rtx *outloc,
can ignore the conflict). We must never introduce writes can ignore the conflict). We must never introduce writes
to such hardregs, as they would clobber the other live to such hardregs, as they would clobber the other live
pseudo. See PR 20973. */ pseudo. See PR 20973. */
|| (!bitmap_bit_p (flag_ira || (!bitmap_bit_p (DF_LR_OUT (ENTRY_BLOCK_PTR),
? DF_LR_OUT (ENTRY_BLOCK_PTR)
: DF_LIVE_OUT (ENTRY_BLOCK_PTR),
ORIGINAL_REGNO (in)) ORIGINAL_REGNO (in))
/* Similarly, only do this if we can be sure that the death /* Similarly, only do this if we can be sure that the death
note is still valid. global can assign some hardreg to note is still valid. global can assign some hardreg to
......
...@@ -557,7 +557,7 @@ compute_use_by_pseudos (HARD_REG_SET *to, regset from) ...@@ -557,7 +557,7 @@ compute_use_by_pseudos (HARD_REG_SET *to, regset from)
which might still contain registers that have not which might still contain registers that have not
actually been allocated since they have an actually been allocated since they have an
equivalence. */ equivalence. */
gcc_assert ((flag_ira && ira_conflicts_p) || reload_completed); gcc_assert (ira_conflicts_p || reload_completed);
} }
else else
add_to_hard_reg_set (to, PSEUDO_REGNO_MODE (regno), r); add_to_hard_reg_set (to, PSEUDO_REGNO_MODE (regno), r);
...@@ -901,7 +901,7 @@ reload (rtx first, int global) ...@@ -901,7 +901,7 @@ reload (rtx first, int global)
for (n = 0, i = LAST_VIRTUAL_REGISTER + 1; i < max_regno; i++) for (n = 0, i = LAST_VIRTUAL_REGISTER + 1; i < max_regno; i++)
temp_pseudo_reg_arr[n++] = i; temp_pseudo_reg_arr[n++] = i;
if (flag_ira && ira_conflicts_p) if (ira_conflicts_p)
/* Ask IRA to order pseudo-registers for better stack slot /* Ask IRA to order pseudo-registers for better stack slot
sharing. */ sharing. */
ira_sort_regnos_for_alter_reg (temp_pseudo_reg_arr, n, reg_max_ref_width); ira_sort_regnos_for_alter_reg (temp_pseudo_reg_arr, n, reg_max_ref_width);
...@@ -1055,7 +1055,7 @@ reload (rtx first, int global) ...@@ -1055,7 +1055,7 @@ reload (rtx first, int global)
calculate_needs_all_insns (global); calculate_needs_all_insns (global);
if (! flag_ira || ! ira_conflicts_p) if (! ira_conflicts_p)
/* Don't do it for IRA. We need this info because we don't /* Don't do it for IRA. We need this info because we don't
change live_throughout and dead_or_set for chains when IRA change live_throughout and dead_or_set for chains when IRA
is used. */ is used. */
...@@ -1614,7 +1614,7 @@ calculate_needs_all_insns (int global) ...@@ -1614,7 +1614,7 @@ calculate_needs_all_insns (int global)
reg_equiv_memory_loc reg_equiv_memory_loc
[REGNO (SET_DEST (set))])))) [REGNO (SET_DEST (set))]))))
{ {
if (flag_ira && ira_conflicts_p) if (ira_conflicts_p)
/* Inform IRA about the insn deletion. */ /* Inform IRA about the insn deletion. */
ira_mark_memory_move_deletion (REGNO (SET_DEST (set)), ira_mark_memory_move_deletion (REGNO (SET_DEST (set)),
REGNO (SET_SRC (set))); REGNO (SET_SRC (set)));
...@@ -1723,7 +1723,7 @@ count_pseudo (int reg) ...@@ -1723,7 +1723,7 @@ count_pseudo (int reg)
|| REGNO_REG_SET_P (&spilled_pseudos, reg) || REGNO_REG_SET_P (&spilled_pseudos, reg)
/* Ignore spilled pseudo-registers which can be here only if IRA /* Ignore spilled pseudo-registers which can be here only if IRA
is used. */ is used. */
|| (flag_ira && ira_conflicts_p && r < 0)) || (ira_conflicts_p && r < 0))
return; return;
SET_REGNO_REG_SET (&pseudos_counted, reg); SET_REGNO_REG_SET (&pseudos_counted, reg);
...@@ -1804,7 +1804,7 @@ count_spilled_pseudo (int spilled, int spilled_nregs, int reg) ...@@ -1804,7 +1804,7 @@ count_spilled_pseudo (int spilled, int spilled_nregs, int reg)
/* Ignore spilled pseudo-registers which can be here only if IRA is /* Ignore spilled pseudo-registers which can be here only if IRA is
used. */ used. */
if ((flag_ira && ira_conflicts_p && r < 0) if ((ira_conflicts_p && r < 0)
|| REGNO_REG_SET_P (&spilled_pseudos, reg) || REGNO_REG_SET_P (&spilled_pseudos, reg)
|| spilled + spilled_nregs <= r || r + nregs <= spilled) || spilled + spilled_nregs <= r || r + nregs <= spilled)
return; return;
...@@ -1876,7 +1876,7 @@ find_reg (struct insn_chain *chain, int order) ...@@ -1876,7 +1876,7 @@ find_reg (struct insn_chain *chain, int order)
if (! ok) if (! ok)
continue; continue;
if (flag_ira && ira_conflicts_p) if (ira_conflicts_p)
{ {
/* Ask IRA to find a better pseudo-register for /* Ask IRA to find a better pseudo-register for
spilling. */ spilling. */
...@@ -2158,7 +2158,7 @@ alter_reg (int i, int from_reg, bool dont_share_p) ...@@ -2158,7 +2158,7 @@ alter_reg (int i, int from_reg, bool dont_share_p)
unsigned int min_align = reg_max_ref_width[i] * BITS_PER_UNIT; unsigned int min_align = reg_max_ref_width[i] * BITS_PER_UNIT;
int adjust = 0; int adjust = 0;
if (flag_ira && ira_conflicts_p) if (ira_conflicts_p)
{ {
/* Mark the spill for IRA. */ /* Mark the spill for IRA. */
SET_REGNO_REG_SET (&spilled_pseudos, i); SET_REGNO_REG_SET (&spilled_pseudos, i);
...@@ -2177,8 +2177,7 @@ alter_reg (int i, int from_reg, bool dont_share_p) ...@@ -2177,8 +2177,7 @@ alter_reg (int i, int from_reg, bool dont_share_p)
enough inherent space and enough total space. enough inherent space and enough total space.
Otherwise, we allocate a new slot, making sure that it has no less Otherwise, we allocate a new slot, making sure that it has no less
inherent space, and no less total space, then the previous slot. */ inherent space, and no less total space, then the previous slot. */
else if (from_reg == -1 else if (from_reg == -1 || (!dont_share_p && ira_conflicts_p))
|| (!dont_share_p && flag_ira && ira_conflicts_p))
{ {
rtx stack_slot; rtx stack_slot;
...@@ -2203,7 +2202,7 @@ alter_reg (int i, int from_reg, bool dont_share_p) ...@@ -2203,7 +2202,7 @@ alter_reg (int i, int from_reg, bool dont_share_p)
adjust); adjust);
} }
if (! dont_share_p && flag_ira && ira_conflicts_p) if (! dont_share_p && ira_conflicts_p)
/* Inform IRA about allocation a new stack slot. */ /* Inform IRA about allocation a new stack slot. */
ira_mark_new_stack_slot (stack_slot, i, total_size); ira_mark_new_stack_slot (stack_slot, i, total_size);
} }
...@@ -3905,7 +3904,7 @@ finish_spills (int global) ...@@ -3905,7 +3904,7 @@ finish_spills (int global)
spill_reg_order[i] = -1; spill_reg_order[i] = -1;
EXECUTE_IF_SET_IN_REG_SET (&spilled_pseudos, FIRST_PSEUDO_REGISTER, i, rsi) EXECUTE_IF_SET_IN_REG_SET (&spilled_pseudos, FIRST_PSEUDO_REGISTER, i, rsi)
if (! flag_ira || ! ira_conflicts_p || reg_renumber[i] >= 0) if (! ira_conflicts_p || reg_renumber[i] >= 0)
{ {
/* Record the current hard register the pseudo is allocated to /* Record the current hard register the pseudo is allocated to
in pseudo_previous_regs so we avoid reallocating it to the in pseudo_previous_regs so we avoid reallocating it to the
...@@ -3915,7 +3914,7 @@ finish_spills (int global) ...@@ -3915,7 +3914,7 @@ finish_spills (int global)
SET_HARD_REG_BIT (pseudo_previous_regs[i], reg_renumber[i]); SET_HARD_REG_BIT (pseudo_previous_regs[i], reg_renumber[i]);
/* Mark it as no longer having a hard register home. */ /* Mark it as no longer having a hard register home. */
reg_renumber[i] = -1; reg_renumber[i] = -1;
if (flag_ira && ira_conflicts_p) if (ira_conflicts_p)
/* Inform IRA about the change. */ /* Inform IRA about the change. */
ira_mark_allocation_change (i); ira_mark_allocation_change (i);
/* We will need to scan everything again. */ /* We will need to scan everything again. */
...@@ -3923,8 +3922,10 @@ finish_spills (int global) ...@@ -3923,8 +3922,10 @@ finish_spills (int global)
} }
/* Retry global register allocation if possible. */ /* Retry global register allocation if possible. */
if (global) if (global && ira_conflicts_p)
{ {
unsigned int n;
memset (pseudo_forbidden_regs, 0, max_regno * sizeof (HARD_REG_SET)); memset (pseudo_forbidden_regs, 0, max_regno * sizeof (HARD_REG_SET));
/* For every insn that needs reloads, set the registers used as spill /* For every insn that needs reloads, set the registers used as spill
regs in pseudo_forbidden_regs for every pseudo live across the regs in pseudo_forbidden_regs for every pseudo live across the
...@@ -3945,49 +3946,23 @@ finish_spills (int global) ...@@ -3945,49 +3946,23 @@ finish_spills (int global)
} }
} }
if (! flag_ira || ! ira_conflicts_p) /* Retry allocating the pseudos spilled in IRA and the
{ reload. For each reg, merge the various reg sets that
/* Retry allocating the spilled pseudos. For each reg, indicate which hard regs can't be used, and call
merge the various reg sets that indicate which hard regs ira_reassign_pseudos. */
can't be used, and call retry_global_alloc. We change for (n = 0, i = FIRST_PSEUDO_REGISTER; i < (unsigned) max_regno; i++)
spill_pseudos here to only contain pseudos that did not if (reg_old_renumber[i] != reg_renumber[i])
get a new hard register. */ {
for (i = FIRST_PSEUDO_REGISTER; i < (unsigned)max_regno; i++) if (reg_renumber[i] < 0)
if (reg_old_renumber[i] != reg_renumber[i]) temp_pseudo_reg_arr[n++] = i;
{ else
HARD_REG_SET forbidden; CLEAR_REGNO_REG_SET (&spilled_pseudos, i);
}
COPY_HARD_REG_SET (forbidden, bad_spill_regs_global); if (ira_reassign_pseudos (temp_pseudo_reg_arr, n,
IOR_HARD_REG_SET (forbidden, pseudo_forbidden_regs[i]); bad_spill_regs_global,
IOR_HARD_REG_SET (forbidden, pseudo_previous_regs[i]); pseudo_forbidden_regs, pseudo_previous_regs,
retry_global_alloc (i, forbidden); &spilled_pseudos))
if (reg_renumber[i] >= 0) something_changed = 1;
CLEAR_REGNO_REG_SET (&spilled_pseudos, i);
}
}
else
{
/* Retry allocating the pseudos spilled in IRA and the
reload. For each reg, merge the various reg sets that
indicate which hard regs can't be used, and call
ira_reassign_pseudos. */
unsigned int n;
for (n = 0, i = FIRST_PSEUDO_REGISTER; i < (unsigned) max_regno; i++)
if (reg_old_renumber[i] != reg_renumber[i])
{
if (reg_renumber[i] < 0)
temp_pseudo_reg_arr[n++] = i;
else
CLEAR_REGNO_REG_SET (&spilled_pseudos, i);
}
if (ira_reassign_pseudos (temp_pseudo_reg_arr, n,
bad_spill_regs_global,
pseudo_forbidden_regs, pseudo_previous_regs,
&spilled_pseudos))
something_changed = 1;
}
} }
/* Fix up the register information in the insn chain. /* Fix up the register information in the insn chain.
This involves deleting those of the spilled pseudos which did not get This involves deleting those of the spilled pseudos which did not get
...@@ -3997,7 +3972,7 @@ finish_spills (int global) ...@@ -3997,7 +3972,7 @@ finish_spills (int global)
HARD_REG_SET used_by_pseudos; HARD_REG_SET used_by_pseudos;
HARD_REG_SET used_by_pseudos2; HARD_REG_SET used_by_pseudos2;
if (! flag_ira || ! ira_conflicts_p) if (! ira_conflicts_p)
{ {
/* Don't do it for IRA because IRA and the reload still can /* Don't do it for IRA because IRA and the reload still can
assign hard registers to the spilled pseudos on next assign hard registers to the spilled pseudos on next
...@@ -7000,7 +6975,7 @@ emit_input_reload_insns (struct insn_chain *chain, struct reload *rl, ...@@ -7000,7 +6975,7 @@ emit_input_reload_insns (struct insn_chain *chain, struct reload *rl,
&& REG_N_SETS (REGNO (old)) == 1) && REG_N_SETS (REGNO (old)) == 1)
{ {
reg_renumber[REGNO (old)] = REGNO (reloadreg); reg_renumber[REGNO (old)] = REGNO (reloadreg);
if (flag_ira && ira_conflicts_p) if (ira_conflicts_p)
/* Inform IRA about the change. */ /* Inform IRA about the change. */
ira_mark_allocation_change (REGNO (old)); ira_mark_allocation_change (REGNO (old));
alter_reg (REGNO (old), -1, false); alter_reg (REGNO (old), -1, false);
...@@ -8541,7 +8516,7 @@ delete_output_reload (rtx insn, int j, int last_reload_reg, rtx new_reload_reg) ...@@ -8541,7 +8516,7 @@ delete_output_reload (rtx insn, int j, int last_reload_reg, rtx new_reload_reg)
/* For the debugging info, say the pseudo lives in this reload reg. */ /* For the debugging info, say the pseudo lives in this reload reg. */
reg_renumber[REGNO (reg)] = REGNO (new_reload_reg); reg_renumber[REGNO (reg)] = REGNO (new_reload_reg);
if (flag_ira && ira_conflicts_p) if (ira_conflicts_p)
/* Inform IRA about the change. */ /* Inform IRA about the change. */
ira_mark_allocation_change (REGNO (reg)); ira_mark_allocation_change (REGNO (reg));
alter_reg (REGNO (reg), -1, false); alter_reg (REGNO (reg), -1, false);
......
...@@ -2212,17 +2212,11 @@ extern void expand_dec (rtx, rtx); ...@@ -2212,17 +2212,11 @@ extern void expand_dec (rtx, rtx);
extern bool can_copy_p (enum machine_mode); extern bool can_copy_p (enum machine_mode);
extern rtx fis_get_condition (rtx); extern rtx fis_get_condition (rtx);
/* In global.c */ /* In ira.c */
#ifdef HARD_CONST #ifdef HARD_CONST
extern HARD_REG_SET eliminable_regset; extern HARD_REG_SET eliminable_regset;
#endif #endif
extern void mark_elimination (int, int); extern void mark_elimination (int, int);
extern void dump_global_regs (FILE *);
#ifdef HARD_CONST
/* Yes, this ifdef is silly, but HARD_REG_SET is not always defined. */
extern void retry_global_alloc (int, HARD_REG_SET);
#endif
extern void build_insn_chain (void);
/* In regclass.c */ /* In regclass.c */
extern int reg_classes_intersect_p (enum reg_class, enum reg_class); extern int reg_classes_intersect_p (enum reg_class, enum reg_class);
...@@ -2247,10 +2241,6 @@ extern bool invalid_mode_change_p (unsigned int, enum reg_class, ...@@ -2247,10 +2241,6 @@ extern bool invalid_mode_change_p (unsigned int, enum reg_class,
/* In reorg.c */ /* In reorg.c */
extern void dbr_schedule (rtx); extern void dbr_schedule (rtx);
/* In local-alloc.c */
extern void dump_local_alloc (FILE *);
extern int update_equiv_regs (void);
/* In reload1.c */ /* In reload1.c */
extern int function_invariant_p (const_rtx); extern int function_invariant_p (const_rtx);
......
...@@ -140,7 +140,6 @@ extern int flag_unroll_all_loops; ...@@ -140,7 +140,6 @@ extern int flag_unroll_all_loops;
extern int flag_unswitch_loops; extern int flag_unswitch_loops;
extern int flag_cprop_registers; extern int flag_cprop_registers;
extern int time_report; extern int time_report;
extern int flag_ira;
extern int flag_ira_coalesce; extern int flag_ira_coalesce;
extern int flag_ira_move_spills; extern int flag_ira_move_spills;
extern int flag_ira_share_save_slots; extern int flag_ira_share_save_slots;
......
...@@ -450,7 +450,7 @@ extern struct rtl_opt_pass pass_web; ...@@ -450,7 +450,7 @@ extern struct rtl_opt_pass pass_web;
extern struct rtl_opt_pass pass_cse2; extern struct rtl_opt_pass pass_cse2;
extern struct rtl_opt_pass pass_df_initialize_opt; extern struct rtl_opt_pass pass_df_initialize_opt;
extern struct rtl_opt_pass pass_df_initialize_no_opt; extern struct rtl_opt_pass pass_df_initialize_no_opt;
extern struct rtl_opt_pass pass_regclass_init; extern struct rtl_opt_pass pass_reginfo_init;
extern struct rtl_opt_pass pass_subregs_of_mode_init; extern struct rtl_opt_pass pass_subregs_of_mode_init;
extern struct rtl_opt_pass pass_subregs_of_mode_finish; extern struct rtl_opt_pass pass_subregs_of_mode_finish;
extern struct rtl_opt_pass pass_inc_dec; extern struct rtl_opt_pass pass_inc_dec;
...@@ -468,8 +468,6 @@ extern struct rtl_opt_pass pass_mode_switching; ...@@ -468,8 +468,6 @@ extern struct rtl_opt_pass pass_mode_switching;
extern struct rtl_opt_pass pass_see; extern struct rtl_opt_pass pass_see;
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_local_alloc;
extern struct rtl_opt_pass pass_global_alloc;
extern struct rtl_opt_pass pass_ira; extern struct rtl_opt_pass pass_ira;
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;
......
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