2014-09-23 20:10 GMT+04:00 Jeff Law <l...@redhat.com>: > On 09/23/14 10:03, Jakub Jelinek wrote: >> >> On Tue, Sep 23, 2014 at 10:00:00AM -0600, Jeff Law wrote: >>> >>> On 09/23/14 08:34, Jakub Jelinek wrote: >>>> >>>> On Tue, Sep 23, 2014 at 05:54:37PM +0400, Ilya Enkovich wrote: >>>>> >>>>> use fixed EBX at least until we make sure pseudo PIC doesn't harm debug >>>>> info generation. If we have such option then gcc.target/i386/pic-1.c >>>>> and >>>> >>>> >>>> For debug info, it seems you are already handling this in >>>> delegitimize_address target hook, I'd suggest just building some very >>>> large >>>> shared library at -O2 -g -fpic on i?86 and either look at the >>>> sizes of .debug_info/.debug_loc sections with/without the patch, >>>> or use the locstat utility from elfutils (talk to Petr Machata if >>>> needed). >>> >>> Can't hurt, but I really don't see how changing from a fixed to an >>> allocatable register is going to muck up debug info in any significant >>> way. >> >> >> What matters is if the delegitimize_address target hook is as efficient in >> delegitimization as before. E.g. if it previously matched only when >> seeing >> %ebx + gotoff or similar, and wouldn't match anything now, some vars could >> have debug locations including UNSPEC and be dropped on the floor. > > Ah, yea, that makes sense. > > jeff
After register allocation we have no idea where GOT address is and therefore delegitimize_address target hook becomes less efficient and cannot remove UNSPECs. That's what I see now when build GCC with patch applied: ../../../../gcc/libgfortran/generated/sum_r4.c: In function 'msum_r4': ../../../../gcc/libgfortran/generated/sum_r4.c:195:1: note: non-delegitimized UNSPEC UNSPEC_GOTOFF (1) found in variable location msum_r4 (gfc_array_r4 * const restrict retarray, ^ ../../../../gcc/libgfortran/generated/sum_r4.c:195:1: note: non-delegitimized UNSPEC UNSPEC_GOTOFF (1) found in variable location ../../../../gcc/libgfortran/generated/sum_r4.c:195:1: note: non-delegitimized UNSPEC UNSPEC_GOTOFF (1) found in variable location ../../../../gcc/libgfortran/generated/sum_r4.c:195:1: note: non-delegitimized UNSPEC UNSPEC_GOTOFF (1) found in variable location ../../../../gcc/libgfortran/generated/sum_r8.c: In function 'msum_r8': ../../../../gcc/libgfortran/generated/sum_r8.c:195:1: note: non-delegitimized UNSPEC UNSPEC_GOTOFF (1) found in variable location msum_r8 (gfc_array_r8 * const restrict retarray, ^ ../../../../gcc/libgfortran/generated/sum_r8.c:195:1: note: non-delegitimized UNSPEC UNSPEC_GOTOFF (1) found in variable location ../../../../gcc/libgfortran/generated/sum_r8.c:195:1: note: non-delegitimized UNSPEC UNSPEC_GOTOFF (1) found in variable location ../../../../gcc/libgfortran/generated/sum_r8.c:195:1: note: non-delegitimized UNSPEC UNSPEC_GOTOFF (1) found in variable location Ilya