On Thu, Nov 28, 2013 at 10:11:26PM +0000, Vladimir Makarov wrote: > Committed as rev. 205498. > > 2013-11-28 Vladimir Makarov<vmaka...@redhat.com> > > PR target/57293 > * ira.h (ira_setup_eliminable_regset): Remove parameter. > * ira.c (ira_setup_eliminable_regset): Ditto. Add > SUPPORTS_STACK_ALIGNMENT for crtl->stack_realign_needed. > Don't call lra_init_elimination. > (ira): Call ira_setup_eliminable_regset without arguments. > * loop-invariant.c (calculate_loop_reg_pressure): Remove argument > from ira_setup_eliminable_regset call. > * gcse.c (calculate_bb_reg_pressure): Ditto. > * haifa-sched.c (sched_init): Ditto. > * lra.h (lra_init_elimination): Remove the prototype. > * lra-int.h (lra_insn_recog_data): New member sp_offset. Move > used_insn_alternative upper. > (lra_eliminate_regs_1): Add one more parameter. > (lra-eliminate): Ditto. > * lra.c (lra_invalidate_insn_data): Set sp_offset. > (setup_sp_offset): New. > (lra_process_new_insns): Call setup_sp_offset. > (lra): Add argument to lra_eliminate calls. > * lra-constraints.c (get_equiv_substitution): Rename to get_equiv. > (get_equiv_with_elimination): New. > (process_addr_reg): Call get_equiv_with_elimination instead of > get_equiv_substitution. > (equiv_address_substitution): Ditto. > (loc_equivalence_change_p): Ditto. > (loc_equivalence_callback, lra_constraints): Ditto. > (curr_insn_transform): Ditto. Print the sp offset > (process_alt_operands): Prevent stack pointer reloads. > (lra_constraints): Remove one argument from lra_eliminate call. > Move it up. Mark used hard regs bfore it. Use > get_equiv_with_elimination instead of get_equiv_substitution. > * lra-eliminations.c (lra_eliminate_regs_1): Add parameter and > assert for param values combination. Use sp offset. Add argument > to lra_eliminate_regs_1 calls. > (lra_eliminate_regs): Add argument to lra_eliminate_regs_1 call. > (curr_sp_change): New static var. > (mark_not_eliminable): Add parameter. Update curr_sp_change. > Don't prevent elimination to sp if we can calculate its change. > Pass the argument to mark_not_eliminable calls. > (eliminate_regs_in_insn): Add a parameter. Use sp offset. Add > argument to lra_eliminate_regs_1 call. > (update_reg_eliminate): Move calculation of hard regs for spill > lower. Switch off lra_in_progress temporarily to generate regs > involved into elimination. > (lra_init_elimination): Rename to init_elimination. Make it > static. Set up insn sp offset, check the offsets at the end of > BBs. > (process_insn_for_elimination): Add parameter. Pass its value to > eliminate_regs_in_insn. > (lra_eliminate): : Add parameter. Pass its value to > process_insn_for_elimination. Add assert for param values > combination. Call init_elimination. Don't update offsets in > equivalence substitutions. > * lra-spills.c (assign_mem_slot): Don't call lra_eliminate_regs_1 > for created stack slot. > (remove_pseudos): Call lra_eliminate_regs_1 before changing memory > onto stack slot. > > 2013-11-28 Vladimir Makarov<vmaka...@redhat.com> > > PR target/57293 > * gcc.target/i386/pr57293.c: New.
Hi Vlad, This patch seems to cause some problems for AArch64. I see an assert triggering when building libgloss: /work/gcc-clean/build-aarch64-none-elf/obj/gcc1/gcc/xgcc -B/work/gcc-clean/build-aarch64-none-elf/obj/gcc1/gcc/ -B/work/gcc-clean/build-aarch64-none-elf/obj/binutils/aarch64-none-elf/newlib/ -isystem /work/gcc-clean/build-aarch64-none-elf/obj/binutils/aarch64-none-elf/newlib/targ-include -isystem /work/gcc-clean/src/binutils/newlib/libc/include -B/work/gcc-clean/build-aarch64-none-elf/obj/binutils/aarch64-none-elf/libgloss/aarch64 -L/work/gcc-clean/build-aarch64-none-elf/obj/binutils/aarch64-none-elf/libgloss/libnosys -L/work/gcc-clean/src/binutils/libgloss/aarch64 -L/work/gcc-clean/build-aarch64-none-elf/obj/binutils/./ld -O2 -g -O2 -g -I. -I/work/gcc-clean/src/binutils/libgloss/aarch64/.. -DARM_RDI_MONITOR -o rdimon-_exit.o -c /work/gcc-clean/src/binutils/libgloss/aarch64/_exit.c /work/gcc-clean/src/binutils/libgloss/aarch64/_exit.c: In function '_exit': /work/gcc-clean/src/binutils/libgloss/aarch64/_exit.c:41:1: internal compiler error: in update_reg_eliminate, at lra-eliminations.c:1157 } ^ 0x84587e update_reg_eliminate /work/gcc-clean/src/gcc/gcc/lra-eliminations.c:1157 0x846ca6 lra_eliminate(bool, bool) /work/gcc-clean/src/gcc/gcc/lra-eliminations.c:1387 0x84114a lra_constraints(bool) /work/gcc-clean/src/gcc/gcc/lra-constraints.c:3887 0x832f3b lra(_IO_FILE*) /work/gcc-clean/src/gcc/gcc/lra.c:2331 0x7f3b1e do_reload /work/gcc-clean/src/gcc/gcc/ira.c:5451 0x7f3b1e rest_of_handle_reload /work/gcc-clean/src/gcc/gcc/ira.c:5580 0x7f3b1e execute /work/gcc-clean/src/gcc/gcc/ira.c:5609 Please submit a full bug report, with preprocessed source if appropriate. Please include the complete backtrace with any bug report. See <http://gcc.gnu.org/bugs.html> for instructions. make[2]: *** [rdimon-_exit.o] Error 1 make[2]: *** Waiting for unfinished jobs.... If you need any more details or logs, let me know. Thanks, James