1. 03 Jan, 2011 1 commit
  2. 12 Jul, 2010 1 commit
    • Makefile.in (target-globals.o): Depend on $(IRA_INT_H). · afcc66c4
      gcc/
      	* Makefile.in (target-globals.o): Depend on $(IRA_INT_H).
      	* ira-int.h (ira_max_nregs, ira_important_class_nums): Delete.
      	(target_ira_int): New structure.
      	(default_target_ira_int): Declare.
      	(this_target_ira_int): Declare as a variable or define as a macro.
      	(ira_reg_mode_hard_regset, ira_register_move_cost)
      	(ira_may_move_in_cost, ira_may_move_out_cost, ira_class_subset_p)
      	(ira_non_ordered_class_hard_regs, ira_class_hard_reg_index)
      	(prohibited_class_mode_regs, ira_important_classes_num)
      	(ira_important_classes, ira_reg_class_intersect)
      	(ira_reg_classes_intersect_p, ira_reg_class_super_classes)
      	(ira_reg_class_union): Redefine as macros.
      	* ira.h (target_ira): New structure.
      	(default_target_ira): Declare.
      	(this_target_ira): Declare as a variable or define as a macro.
      	(ira_available_class_regs, ira_hard_regno_cover_class)
      	(ira_reg_class_cover_size, ira_reg_class_cover, ira_class_translate)
      	(ira_reg_class_nregs, ira_memory_move_cost, ira_class_hard_regs)
      	(ira_class_hard_regs_num): Redefine as macros.
      	* ira.c (default_target_ira, default_target_ira_int): New variables.
      	(this_target_ira, this_target_ira_int): New conditional variables.
      	(ira_reg_mode_hard_regset, ira_memory_move_cost)
      	(ira_register_move_cost, ira_may_move_in_cost, ira_may_move_out_cost)
      	(ira_class_subset_p): Delete.
      	(no_unit_alloc_regs): Redefine as a macro.
      	(ira_class_hard_regs, ira_non_ordered_class_hard_regs)
      	(ira_class_hard_regs_num, ira_class_hard_reg_index)
      	(ira_available_class_regs): Delete.
      	(alloc_reg_class_subclasses): Redefine as a macro.
      	(ira_reg_class_cover_size, ira_reg_class_cover)
      	(ira_important_classes_num, ira_important_classes)
      	(ira_important_class_nums, ira_class_translate): Delete.
      	(cover_class_order): Document the variable's lifetime.
      	(reorder_important_classes): Don't set ira_important_class_nums.
      	(ira_reg_class_intersect, ira_reg_classes_intersect_p)
      	(ira_reg_class_super_classes, ira_reg_class_union)
      	(ira_hard_regno_cover_class, ira_reg_class_nregs, ira_max_nregs):
      	Delete.
      	(setup_reg_class_nregs): Don't set ira_max_regs.
      	(prohibited_class_mode_regs): Delete.
      	* target-globals.h (this_target_ira, this_target_ira_int): Declare.
      	(target_globals): Add ira and ira_int fields.
      	(restore_target_globals): Copy the ira field to this_target_ira
      	and the ira_int field to this_target_ira_int.
      	* target-globals.c: Include ira-int.h.
      	(default_target_globals): Initialize the ira and ira_int fields.
      	(save_target_globals): Likewise.
      
      From-SVN: r162102
      Richard Sandiford committed
  3. 05 Jun, 2010 1 commit
    • target.h (struct gcc_target): Add memory_move_cost field. · f5c21ef3
      	* target.h (struct gcc_target): Add memory_move_cost field.
      	* target-def.h (TARGET_MEMORY_MOVE_COST): New.
      	(TARGET_INITIALIZER): Use TARGET_MEMORY_MOVE_COST.
      	* targhooks.c (default_memory_move_cost): New function.
      	* targhooks.h (default_memory_move_cost): Declare function.
      	* reload.h (memory_move_cost): Declare.
      	(memory_move_secondary_cost): Change type of 'in' argument to bool.
      	* reginfo.c (memory_move_cost): New function.
      	(memory_move_secondary_cost): Change type of 'in' argument to bool.
      	* ira.h (ira_memory_move_cost): Update comment.
      	* ira.c: (ira_memory_move_cost): Update comment.
      	(setup_class_subset_and_memory_move_costs): Replace MEMORY_MOVE_COST
      	with memory_move_cost.
      	* postreload.c (reload_cse_simplify_set): (Ditto.).
      	* reload1.c (choose_reload_regs): (Ditto.).
      	* doc/tm.texi (TARGET_MEMORY_MOVE_COST): New.
      	(MEMORY_MOVE_COST):  Revise documentation.
      
      	* config/i386/i386.h (MEMORY_MOVE_COST): Remove macro.
      	* config/i386/i386-protos.h (int ix86_memory_move_cost): Remove.
      	* config/i386/i386.h (ix86_memory_move_cost): Make static. Change
      	type of 'in' argument to bool.
      	(TARGET_MEMORY_MOVE_COST): Define.
      
      From-SVN: r160323
      Anatoly Sokolov committed
  4. 04 Jun, 2010 1 commit
    • re PR rtl-optimization/39871 (Code size increase on ARM due to poor register allocation) · 8ff49c29
      	PR rtl-optimization/39871
      	PR rtl-optimization/40615
      	PR rtl-optimization/42500
      	PR rtl-optimization/42502
      	* ira.c (init_reg_equiv_memory_loc: New function.
      	(ira): Call it twice.
      	* reload.h (calculate_elim_costs_all_insns): Declare.
      	* ira-costs.c: Include "reload.h".
      	(regno_equiv_gains): New static variable.
      	(init_costs): Allocate it.
      	(finish_costs): Free it.
      	(ira_costs): Call calculate_elim_costs_all_insns.
      	(find_costs_and_classes): Take estimated elimination costs
      	into account.
      	(ira_adjust_equiv_reg_cost): New function.
      	* ira.h (ira_adjust_equiv_reg_cost): Declare it.
      	* reload1.c (init_eliminable_invariants, free_reg_equiv,
      	elimination_costs_in_insn, note_reg_elim_costly): New static
      	functions.
      	(elim_bb): New static variable.
      	(reload): Move code out of here into init_eliminable_invariants and
      	free_reg_equiv.  Call them.
      	(calculate_elim_costs_all_insns): New function.
      	(eliminate_regs_1): Declare.  Add extra arg FOR_COSTS;
      	all callers changed.  If FOR_COSTS is true, don't call alter_reg,
      	but call note_reg_elim_costly if we turned a valid memory address
      	into an invalid one.
      	* Makefile.in (ira-costs.o): Depend on reload.h.
      
      testsuite/
      	PR rtl-optimization/39871
      	PR rtl-optimization/40615
      	PR rtl-optimization/42500
      	PR rtl-optimization/42502
      	* gcc.target/arm/eliminate.c: New test.
      
      From-SVN: r160260
      Bernd Schmidt committed
  5. 28 May, 2010 1 commit
  6. 02 Sep, 2009 1 commit
    • invoke.texi (-fsched-pressure): Document it. · ce18efcb
      2009-09-02  Vladimir Makarov  <vmakarov@redhat.com>
      
      	* doc/invoke.texi (-fsched-pressure): Document it.
      	(-fsched-reg-pressure-heuristic): Remove it.
      	
      	* reload.c (ira.h): Include.
      	(find_reloads): Add choosing reload on number of small spilled
      	classes.
      	
      	* haifa-sched.c (ira.h): Include.
      	(sched_pressure_p, sched_regno_cover_class, curr_reg_pressure,
      	saved_reg_pressure, curr_reg_live, saved_reg_live,
      	region_ref_regs): New variables.
      	(sched_init_region_reg_pressure_info, mark_regno_birth_or_death,
      	initiate_reg_pressure_info, setup_ref_regs,
      	initiate_bb_reg_pressure_info, save_reg_pressure,
      	restore_reg_pressure, dying_use_p, print_curr_reg_pressure): New
      	functions.
      	(setup_insn_reg_pressure_info): New function.
      	(rank_for_schedule): Add pressure checking and insn issue time.
      	Remove comparison of insn reg weights.
      	(ready_sort): Set insn reg pressure info.
      	(update_register_pressure, setup_insn_max_reg_pressure,
      	update_reg_and_insn_max_reg_pressure,
      	sched_setup_bb_reg_pressure_info): New functions.
      	(schedule_insn): Add code for printing and updating reg pressure
      	info.
      	(find_set_reg_weight, find_insn_reg_weight): Remove.
      	(ok_for_early_queue_removal): Do nothing if pressure_only_p.
      	(debug_ready_list): Print reg pressure info.
      	(schedule_block): Ditto.  Check insn issue time.
      	(sched_init): Set up sched_pressure_p.  Allocate and set up some
      	reg pressure related info.
      	(sched_finish): Free some reg pressure related info.
      	(fix_tick_ready): Make insn always ready if pressure_p.
      	(init_h_i_d): Don't call find_insn_reg_weight.
      	(haifa_finish_h_i_d): Free insn reg pressure info.
      	
      	* ira-int.h (ira_hard_regno_cover_class, ira_reg_class_nregs,
      	ira_memory_move_cost, ira_class_hard_regs,
      	ira_class_hard_regs_num, ira_no_alloc_regs,
      	ira_available_class_regs, ira_reg_class_cover_size,
      	ira_reg_class_cover, ira_class_translate): Move to ira.h.
      
      	* ira-lives.c (single_reg_class): Check mode to find how many
      	registers are necessary for operand.
      	(ira_implicitly_set_insn_hard_regs): New.
      
      	* common.opt (fsched-pressure): New options.
      	(fsched-reg-pressure-heuristic): Remove.
      
      	* ira.c (setup_eliminable_regset): Rename to
      	ira_setup_eliminable_regset.  Make it external.
      	(expand_reg_info): Pass cover class to setup_reg_classes.
      	(ira): Call resize_reg_info instead of allocate_reg_info.
      
      	* sched-deps.c: Include ira.h.
      	(implicit_reg_pending_clobbers, implicit_reg_pending_uses): New.
      	(create_insn_reg_use, create_insn_reg_set, setup_insn_reg_uses,
      	reg_pressure_info, insn_use_p, mark_insn_pseudo_birth,
      	mark_insn_hard_regno_birth, mark_insn_reg_birth,
      	mark_pseudo_death, mark_hard_regno_death, mark_reg_death,
      	mark_insn_reg_store, mark_insn_reg_clobber,
      	setup_insn_reg_pressure_info): New.
      	(sched_analyze_1): Update implicit_reg_pending_uses.
      	(sched_analyze_insn): Find implicit sets, uses, clobbers of regs.
      	Use them to create dependencies.  Set insn reg uses and pressure
      	info.  Process reg_pending_uses in one place.
      	(free_deps): Free implicit sets.
      	(remove_from_deps): Remove implicit sets if necessary.  Check
      	implicit sets when clearing reg_last_in_use.
      	(init_deps_global): Clear implicit_reg_pending_clobbers and
      	implicit_reg_pending_uses.
      	
      	* ira.h (ira_hard_regno_cover_class, ira_reg_class_nregs,
      	ira_memory_move_cost, ira_class_hard_regs,
      	ira_class_hard_regs_num, ira_no_alloc_regs,
      	ira_available_class_regs, ira_reg_class_cover_size,
      	ira_reg_class_cover, ira_class_translate): Move from ira-int.h.
      	(ira_setup_eliminable_regset, ira_set_pseudo_classes,
      	ira_implicitly_set_insn_hard_regs): New prototypes.
      	
      	* ira-costs.c (pseudo_classes_defined_p, allocno_p,
      	cost_elements_num): New variables.
      	(allocno_costs, total_costs): Rename to costs and
      	total_allocno_costs.
      	(COSTS_OF_ALLOCNO): Rename to COSTS.
      	(allocno_pref): Rename to pref.
      	(allocno_pref_buffer): Rename to pref_buffer.
      	(common_classes): Rename to regno_cover_class.
      	(COST_INDEX): New.
      	(record_reg_classes): Set allocno attributes only if allocno_p.
      	(record_address_regs): Ditto.  Use COST_INDEX instead of
      	ALLOCNO_NUM.
      	(scan_one_insn): Use COST_INDEX and COSTS instead of ALLOCNO_NUM
      	and COSTS_OF_ALLOCNO.
      	(print_costs): Rename to print_allocno_costs.
      	(print_pseudo_costs): New.
      	(process_bb_node_for_costs): Split into 2 functions with new
      	function process_bb_for_costs.  Pass BB to process_bb_for_costs.
      	(find_allocno_class_costs): Rename to find_costs_and_classes.  Add
      	new parameter dump_file.  Use cost_elements_num instead of
      	ira_allocnos_num.  Make one iteration if preferred classes were
      	already calculated for scheduler.  Make 2 versions of code
      	depending on allocno_p.
      	(setup_allocno_cover_class_and_costs): Check allocno_p.  Use
      	regno_cover_class and COSTS instead of common_classes and
      	COSTS_OF_ALLOCNO.
      	(init_costs, finish_costs): New.
      	(ira_costs): Set up allocno_p and cost_elements_num.  Call
      	init_costs and finish_costs.
      	(ira_set_pseudo_classes): New.
      
      	* rtl.h (allocate_reg_info): Remove.
      	(resize_reg_info): Change return type.
      	(reg_cover_class): New.
      	(setup_reg_classes): Add new parameter.
      	
      	* sched-int.h (struct deps_reg): New member implicit_sets.
      	(sched_pressure_p, sched_regno_cover_class): New external
      	definitions.
      	(INCREASE_BITS): New macro.
      	(struct reg_pressure_data, struct reg_use_data): New.
      	(struct _haifa_insn_data): Remove reg_weight.  Add members
      	reg_pressure, reg_use_list, reg_set_list, and
      	reg_pressure_excess_cost_change.
      	(struct deps): New member implicit_sets.
      	(pressure_p): New variable.
      	(COVER_CLASS_BITS, INCREASE_BITS): New macros.
      	(struct reg_pressure_data, struct reg_use_data): New.
      	(INSN_REG_WEIGHT): Remove.
      	(INSN_REG_PRESSURE, INSN_MAX_REG_PRESSURE, INSN_REG_USE_LIST,
      	INSN_REG_SET_LIST, INSN_REG_PRESSURE_EXCESS_COST_CHANGE): New
      	macros.
      	(sched_init_region_reg_pressure_info,
      	sched_setup_bb_reg_pressure_info): New prototypes.
      	
              * reginfo.c (struct reg_pref): New member coverclass.
      	(reg_cover_class): New function.
      	(reginfo_init, pass_reginfo_init): Move after free_reg_info.
      	(reg_info_size): New variable.
      	(allocate_reg_info): Make static.  Setup reg_info_size.
      	(resize_reg_info): Use reg_info_size.  Return flag of resizing.
      	(setup_reg_classes): Add a new parameter.  Setup cover class too.
      
      	* Makefile.in (reload.o, haifa-sched.o, sched-deps.o): Add ira.h to the
      	dependencies.
      
      	* sched-rgn.c (deps_join): Set up implicit_sets.
      	(schedule_region): Set up region and basic blocks pressure
      	relative info.
      	
      	* passes.c (init_optimization_passes): Move
      	pass_subregs_of_mode_init before pass_sched.
      
      From-SVN: r151348
      Vladimir Makarov committed
  7. 20 Feb, 2009 1 commit
  8. 06 Jan, 2009 1 commit
    • re PR rtl-optimization/38583 (huge test case makes register allocator run out of… · 311aab06
      re PR rtl-optimization/38583 (huge test case makes register allocator run out of memory while constructing the conflict graph)
      
      2009-01-05  Vladimir Makarov  <vmakarov@redhat.com>
      
      	PR rtl-optimization/38583
      	* params.h (IRA_MAX_CONFLICT_TABLE_SIZE): New macro.
      
      	* params.def (ira-max-conflict-table-size): New.
      
      	* doc/invoke.texi (ira-max-conflict-table-size): Decribe.
      	
      	* ira.h (ira_conflicts_p): New external definition.
      	
      	* ira-conflicts.c (build_conflict_bit_table): Do not build too big
      	table.  Report this.  Return result of building.
      	(ira_build_conflicts): Use ira_conflicts_p.  Check result of
      	building conflict table.
      
      	* ira-color.c (fast_allocation): Use num instead of
      	ira_allocnos_num.
      	(ira_color): Use ira_conflicts_p.
      	
      	* global.c: Include ira.h.
      	(pseudo_for_reload_consideration_p, build_insn_chain): Use
      	ira_conflicts_p.
      
      	* Makefile.in (global.o): Add ira.h.
      	
      	* ira-build.c (mark_all_loops_for_removal,
      	propagate_some_info_from_allocno): New.
      	(remove_unnecessary_allocnos): Call
      	propagate_some_info_from_allocno.
      	(remove_low_level_allocnos): New.
      	(remove_unnecessary_regions): Add parameter.  Call
      	mark_all_loops_for_removal and remove_low_level_allocnos.  Pass
      	parameter to remove_unnecessary_regions.
      	(ira_build): Remove all regions but root if the conflict table was
      	not built.  Update conflict hard regs for allocnos crossing calls.
      
      	* ira.c (ira_conflicts_p): New global.
      	(ira): Define and use ira_conflicts_p.
      
      	* reload1.c (compute_use_by_pseudos, reload, count_pseudo,
      	count_spilled_pseudo, find_reg, alter_reg, finish_spills,
      	emit_input_reload_insns, delete_output_reload): Use
      	ira_conflicts_p.
      
      From-SVN: r143112
      Vladimir Makarov committed
  9. 03 Sep, 2008 1 commit
  10. 26 Aug, 2008 1 commit
    • [multiple changes] · 058e97ec
      2008-08-26  Vladimir Makarov  <vmakarov@redhat.com>
      
      	* ira-build.c, ira-color.c, ira-costs.c, ira.h, ira-lives.c,
      	ira.c, ira-conflicts.c, ira-emit.c, ira-int.h: New files.
      
      	* doc/passes.texi: Describe IRA.
      
      	* doc/tm.texi (IRA_COVER_CLASSES,
      	IRA_HARD_REGNO_ADD_COST_MULTIPLIER): Describe the new macros.
      
      	* doc/invoke.texi (ira-max-loops-num): Describe the new parameter.
      	(-fira, -fira-algorithm, -fira-coalesce, -fno-ira-move-spills,
      	-fira-propagate-cost, -fno-ira-share-save-slots,
      	-fno-ira-share-spill-slots, -fira-verbose): Describe new options.
      
      	* flags.h (ira_algorithm): New enumeration.
      	(flag_ira_algorithm, flag_ira_verbose): New external variable
      	declarations.
      
      	* postreload.c (gate_handle_postreload): Don't do post reload
      	optimizations unless the reload is completed.
      
      	* reload.c (push_reload, find_dummy_reload): Use DF_LR_OUT for
      	IRA.
      
      	* tree-pass.h (pass_ira): New external variable declaration.
      
      	* reload.h: Add 2008 to the Copyright.
          
      	* cfgloopanal.c: Include params.h.
      	(estimate_reg_pressure_cost): Decrease cost for IRA optimization
      	mode.
          
      	* params.h (IRA_MAX_LOOPS_NUM): New macro.
      
      	* toplev.c (ira.h): New include.
      	(flag_ira_algorithm, flag_ira_verbose): New external variables.
      	(backend_init_target): Call ira_init.
      	(backend_init): Call ira_init_once.
      	(finalize): Call finish_ira_once.
      
      	* toplev.h (flag_ira, flag_ira_coalesce, flag_ira_move_spills,
      	flag_ira_share_save_slots, flag_ira_share_spill_slots): New
      	external variables.
      
      	* regs.h (contains_reg_of_mode, move_cost, may_move_in_cost,
      	may_move_out_cost): New external variable declarations.
      	(move_table): New typedef.
          
      	* caller-save.c: Include headers output.h and ira.h.
      	(no_caller_save_reg_set): New global variable.
      	(save_slots_num, save_slots): New variables.
      	(reg_save_code, reg_restore_code, add_stored_regs): Add
      	prototypes.
      	(init_caller_save): Set up no_caller_save_reg_set.
      	(init_save_areas): Reset save_slots_num.
      	(saved_hard_reg): New structure.
      	(hard_reg_map, saved_regs_num, all_saved_regs): New variables.
      	(initiate_saved_hard_regs, new_saved_hard_reg,
      	finish_saved_hard_regs, saved_hard_reg_compare_func): New
      	functions.
      	(setup_save_areas): Add code for sharing stack slots.
      	(all_blocks): New variable.
      	(save_call_clobbered_regs): Process pseudo-register too.
      	(mark_set_regs): Process pseudo-register too.
      	(insert_one_insn): Put the insn after bb note in a empty basic
      	block.  Add insn check.
          
      	* global.c (eliminable_regset): Make it external.
      	(mark_elimination): Use DF_LR_IN for IRA.
      	(pseudo_for_reload_consideration_p): New.
      	(build_insn_chain): Make it external.  Don't ignore spilled
      	pseudos for IRA.  Use pseudo_for_reload_consideration_p.
      	(gate_handle_global_alloc): New function.
      	(pass_global_alloc): Add the gate function.
      
      	* opts.c (decode_options): Set up flag_ira.  Print the warning for
      	-fira.
      	(common_handle_option): Process -fira-algorithm and -fira-verbose.
      
      	* timevar.def (TV_IRA, TV_RELOAD): New passes.
      
      	* regmove.c (regmove_optimize): Don't do replacement of output for
      	IRA.
      
      	* hard-reg-set.h (no_caller_save_reg_set, reg_class_subclasses):
      	New external variable declarations.
      
      	* local-alloc.c (update_equiv_regs): Make it external.  Return
      	true if jump label rebuilding should be done.  Rescan new_insn for
      	notes.
      	(gate_handle_local_alloc): New function.
      	(pass_local_alloc): Add the gate function.
      
      	* alias.c (value_addr_p, stack_addr_p): New functions.
      	(nonoverlapping_memrefs_p): Use them for IRA.
      
      	* common.opt (fira, fira-algorithm, fira-coalesce,
      	fira-move-spills, fira-share-save-slots, fira-share-spill-slots,
      	fira-verbose): New options.
      
      	* regclass.c (reg_class_subclasses, contains_reg_of_mode,
      	move_cost, may_move_in_cost, may_move_out_cost): Make the
      	variables external.
      	(move_table): Remove typedef.
      	(init_move_cost): Make it external.
      	(allocate_reg_info, resize_reg_info, setup_reg_classes): New
      	functions.
      
      	* rtl.h (init_move_cost, allocate_reg_info, resize_reg_info,
      	setup_reg_classes): New function prototypes.
      	(eliminable_regset): New external variable declaration.
      	(build_insn_chain, update_equiv_regs): New function prototypes.
          
      	* Makefile.in (IRA_INT_H): New definition.
      	(OBJS-common): Add ira.o, ira-build.o, ira-costs.o,
      	ira-conflicts.o, ira-color.o, ira-emit.o, and ira-lives.o.
      	(reload1.o, toplev.o): Add dependence on ira.h.
      	(cfgloopanal.o): Add PARAMS_H.
      	(caller-save.o): Add dependence on output.h and ira.h.
      	(ira.o, ira-build.o, ira-costs.o, ira-conflicts.o, ira-color.o,
      	ira-emit.o, ira-lives.o): New entries.
      
      	* passes.c (pass_ira): New pass.
      
      	* params.def (PARAM_IRA_MAX_LOOPS_NUM): New parameter.
      
      	* reload1.c (ira.h): Include the header.
      	(changed_allocation_pseudos): New bitmap.
      	(init_reload): Initiate the bitmap.
      	(compute_use_by_pseudos): Permits spilled registers in FROM.
      	(temp_pseudo_reg_arr): New variable.
      	(reload): Allocate and free temp_pseudo_reg_arr.  Sort pseudos for
      	IRA.  Call alter_reg with the additional parameter.  Don't clear
      	spilled_pseudos for IRA.  Restore original insn chain for IRA.
      	Clear changed_allocation_pseudos at the end of reload.
      	(calculate_needs_all_insns): Call IRA's mark_memory_move_deletion.
      	(hard_regno_to_pseudo_regno): New variable.
      	(count_pseudo): Check spilled pseudos.  Set up
      	hard_regno_to_pseudo_regno.
      	(count_spilled_pseudo): Check spilled pseudos. Update
      	hard_regno_to_pseudo_regno.
      	(find_reg): Use better_spill_reload_regno_p.  Check
      	hard_regno_to_pseudo_regno.
      	(alter_reg): Set up spilled_pseudos.  Add a new parameter.  Add
      	code for IRA.
      	(eliminate_regs_1): Use additional parameter for alter_reg.
      	(finish_spills): Set up pseudo_previous_regs only for spilled
      	pseudos.  Call reassign_pseudos once for all spilled pseudos, pass
      	more arguments.  Don't clear live_throughout and dead_or_set for
      	spilled pseudos.  Use additional parameter for alter_reg.  Call
      	mark_allocation_change.  Set up changed_allocation_pseudos.
      	Remove sanity check.
      	(emit_input_reload_insns, delete_output_reload): Use additional
      	parameter for alter_reg.  Call mark_allocation_change.
      	(substitute, gen_reload_chain_without_interm_reg_p): New
      	functions.
      	(reloads_conflict): Use gen_reload_chain_without_interm_reg_p.
          
      	* testsuite/gcc.dg/20080410-1.c: New file.
      	
      	* config/s390/s390.h (IRA_COVER_CLASSES,
      	IRA_HARD_REGNO_ADD_COST_MULTIPLIER): Define.
      
      	* config/sparc/sparc.h (IRA_COVER_CLASSES): New macro.
      
      	* config/i386/i386.h (IRA_COVER_CLASSES): Ditto.
      
      	* config/ia64/ia64.h (IRA_COVER_CLASSES): Ditto.
      
      	* config/rs6000/rs6000.h (IRA_COVER_CLASSES): Ditto.
      
      	* config/arm/arm.h (IRA_COVER_CLASSES): Ditto.
          
      	* config/alpha/alpha.h (IRA_COVER_CLASSES): Ditto.
          
      	2008-08-24  Jeff Law  <law@redhat.com>
      	* ira.c (setup_reg_class_intersect_union): Prefer smallest class
      	when ignoring unavailable registers.
      
      	2008-08-24  Jeff Law  <law@redhat.com>
      	* ira-color.c (coalesced_pseudo_reg_slot_compare): Check
      	FRAME_GROWS_DOWNWARD and STACK_GROWS_DOWNWARD.
      	* ira.c (setup_eliminable_regset): Check stack_realign_needed.
      	* config/mn10300/mn10300.h (IRA_COVER_CLASSES): New macro.
      
      	2008-06-03 Steve Chamberlain <steve.chamberlain@gmail.com>
      	* ira-build.c (allocno_range_compare_func): Stabilize sort.
      
      	2008-05-29 Andy Hutchinson <hutchinsonandy@aim.com>
      	* config/avr/avr.h (IRA_COVER_CLASSES): New macro.
      	* reload1.c (find_reg): Process registers in register allocation order.
      
      	2008-05-10 Richard Sandiford <rsandifo@nildram.co.uk>
      	* toplev.c (backend_init_target): Move ira_init call from
      	here...
      	(lang_dependent_init_target): ...to here.
      
      	2008-05-10 Richard Sandiford <rsandifo@nildram.co.uk>
      	* ira.c (setup_class_subset_and_memory_move_costs): Don't
      	calculate memory move costs for NO_REGS.
      
      	2008-05-05 Kaz Kojima <kkojima@gcc.gnu.org>
      	* ira-color.c (ira_fast_allocation): Use no_stack_reg_p only if
      	STACK_REGS is defined.
      
      	2008-04-08 Andrew Pinski <andrew_pinski@playstation.sony.com>
      	* config/spu/spu.h (IRA_COVER_CLASSES): New macro.
      
      	2008-04-04 Bernd Schmidt <bernd.schmidt@analog.com>
      	* config/bfin/bfin.h (IRA_COVER_CLASSES): New macro.
      
      	2008-04-04 Kaz Kojima <kkojima@gcc.gnu.org>
      	* config/sh/sh.h (IRA_COVER_CLASSES): Define.
      	* config/sh/sh.md (movsicc_true+3): Check if emit returns a
      	barrier.
      
      From-SVN: r139590
      Vladimir Makarov committed