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) {}

Reply via email to