This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: [i386] Scalar DImode instructions on XMM registers
- From: Ilya Enkovich <enkovich dot gnu at gmail dot com>
- To: Vladimir Makarov <vmakarov at redhat dot com>
- Cc: GCC Development <gcc at gcc dot gnu dot org>, Uros Bizjak <ubizjak at gmail dot com>, Richard Henderson <rth at redhat dot com>, Jan Hubicka <hubicka at ucw dot cz>, Jeff Law <law at redhat dot com>
- Date: Fri, 22 May 2015 11:53:16 +0300
- Subject: Re: [i386] Scalar DImode instructions on XMM registers
- Authentication-results: sourceware.org; auth=none
- References: <CAMbmDYaDrCnDCnQfP0toV87pi_mE_pbPCP6M-FEkGNDAtWKFUA at mail dot gmail dot com> <CAFULd4amXWDT45oUNqi2cLL2Tec-kMJm7Kz301myZSWZw-3H7Q at mail dot gmail dot com> <alpine dot DEB dot 2 dot 11 dot 1504241222020 dot 1687 at laptop-mg dot saclay dot inria dot fr> <CAMbmDYYfq-RVYa0MwrGH_DpnV7psPHKZpxaouMuq_nsOPeO_ug at mail dot gmail dot com> <20150425013239 dot GB719 at atrey dot karlin dot mff dot cuni dot cz> <CAMbmDYbN7Zk9gg=UNRP3O8L8e5qxiK6jXi-SLEVDoMmBbqLXFQ at mail dot gmail dot com> <CAMbmDYY+a=LeqTcajW=g=e01q=R5ALykhFLwF0ypcAhKjnv0RA at mail dot gmail dot com> <555B552A dot 8010008 at redhat dot com> <20150520081738 dot GE47912 at msticlxl57 dot ims dot intel dot com> <555D50A3 dot 2000206 at redhat dot com> <20150521095442 dot GH47912 at msticlxl57 dot ims dot intel dot com> <555E2D37 dot 30107 at redhat dot com>
2015-05-21 22:08 GMT+03:00 Vladimir Makarov <vmakarov@redhat.com>:
> On 05/21/2015 05:54 AM, Ilya Enkovich wrote:
>>>
>>> Thanks. For me it looks like an inheritance bug. It is really hard
>>> >to fix the bug w/o the source code. Could you send me your patch in
>>> >order I can debug RA with it to investigate more.
>>> >
>>
>> Sure! Here is a patch and a testcase. I applied patch to r222125. Cmd to
>> reproduce:
>>
>> gcc -m32 -msse4.2 -O2 pr65105.c -S -march=slm -fPIE
>
> The problem is in sharing a subreg in different insns. Pseudo should be
> shared but not their subregs.
>
> We have before inheritance:
>
> 28: r132:V2DI=r132:V2DI|r126:DI#0
> REG_DEAD r126:DI
> REG_DEAD r118:DI
> Inserting insn reload before:
> 81: r132:V2DI=r118:DI#0
> Inserting insn reload after:
> 82: r108:DI#0=r132:V2DI
> ...
> Creating newreg=135, assigning class SSE_REGS to r135
> 42: r135:V2DI=r135:V2DI&r108:DI#0
> REG_DEAD r127:DI
> Inserting insn reload before:
> 85: r135:V2DI=r127:DI#0
> Inserting insn reload after:
> 86: r108:DI#0=r135:V2DI
>
> As subreg of 108 in original insns 28 and 42 are shared, The subregs of 108
> in insns 82 and 86 are shared too. During inheritance subpass we change
> r108 in insn 82 onto r137. This change insn 86 too.
>
> Creating newreg=137 from oldreg=108, assigning class NO_REX_SSE_REGS
> to inheritance r137
> Original reg change 108->137 (bb2):
> 82: r137:DI#0=r132:V2DI
> REG_DEAD r132:V2DI
> Add original<-inheritance after:
> 88: r108:DI=r137:DI
>
> Inheritance reuse change 108->137 (bb2):
> 68: r124:V2DI=r137:DI#0
>
> And now we are trying to do inheritance for insn #86:
>
> Creating newreg=138 from oldreg=108, assigning class NO_REX_SSE_REGS to
> inheritance r138
> Original reg change 108->138 (bb3):
> 86: r137:DI#0=r135:V2DI
> REG_DEAD r135:V2DI
> Add original<-inheritance after:
> 89: r108:DI=r138:DI
>
> Inheritance reuse change 108->138 (bb3):
> 64: r123:V2DI=r137:DI#0
>
> and after that having a complete mess. We are trying to change r108 onto
> r138, but r108 is already r137 because of sharing. Later we undo the second
> inheritance creating even more mess.
>
> So, Ilya, to solve the problem you need to avoid sharing subregs for the
> correct LRA/reload work.
>
>
Thanks a lot for your help! I'll fix it.
Ilya