http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59340
Bug ID: 59340 Summary: LRA enable-checking bootstrap failure since r205136 Product: gcc Version: 4.9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: rtl-optimization Assignee: unassigned at gcc dot gnu.org Reporter: krebbel at gcc dot gnu.org The following code has been added to s390_decompose_address for the LRA enablement to prevent strict displacement checking for addresses including eliminable registers. Only during LRA execution the displacements are expected to be valid. 199754 vmakarov if (lra_in_progress 199754 vmakarov || (base != arg_pointer_rtx 199754 vmakarov && indx != arg_pointer_rtx 199754 vmakarov && base != return_address_pointer_rtx 199754 vmakarov && indx != return_address_pointer_rtx 199754 vmakarov && base != frame_pointer_rtx 199754 vmakarov && indx != frame_pointer_rtx 199754 vmakarov && base != virtual_stack_vars_rtx 199754 vmakarov && indx != virtual_stack_vars_rtx)) However, with: Author: law Date: Wed Nov 20 18:17:49 2013 New Revision: 205136 URL: http://gcc.gnu.org/viewcvs?rev=205136&root=gcc&view=rev Log: * lra.c (lra): Set lra_in_progress before check_rtl call. * recog.c (insn_invalid_p): Add !lra_in_progress to prevent adding clobber regs when LRA is running Modified: trunk/gcc/ChangeLog trunk/gcc/lra.c trunk/gcc/recog.c the lra_in_progress = 1; statement has been moved before the initial LRA check_rtl invokation so s390_decompose_address now expects the displacements to be valid already what obviously is not the case. This leads to a bootstrap failure: /home/andreas/patched/gcc-head/libgcc/libgcc2.c: In function ‘__mulsc3’: /home/andreas/patched/gcc-head/libgcc/libgcc2.c:1932:1: error: insn does not satisfy its constraints: } ^ (insn 21 26 23 2 (set (mem/c:SF (plus:DI (reg/f:DI 34 %fp) (const_int -16 [0xfffffffffffffff0])) [2 ac+0 S4 A64]) (reg:SF 108 [ D.5596 ])) /home/andreas/patched/gcc-head/libgcc/libgcc2.c:1874 88 {movsf} (expr_list:REG_DEAD (reg:SF 108 [ D.5596 ]) (nil))) /home/andreas/patched/gcc-head/libgcc/libgcc2.c:1932:1: internal compiler error: in check_rtl, at lra.c :2043 It can easily be reproduced with: cc1 -O0 t.c t.c: void foo (int a) {}