This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Question on register renaming in rtl loop unroll pass


On Fri, Jun 28, 2013 at 6:39 PM, Eric Botcazou <ebotcazou@adacore.com> wrote:
>> The problem is auto-inc-dec is weak and can only capture
>> post-increment in first part of code, generating even worse code for
>> RA:
>> .L1:
>>   r197 <- r162
>>   [r197++] <- x
>>   ...
>>   [r162+4] <- y
>>   r162 <- r197+0x4
>>   ...
>>   b .L1
>> Now we have two live registers and it seems hard to eliminate.
>>
>> So could the unrolled codes be like below?
>
> I'd try the opposite first, i.e to do more renaming so as to get smaller live
> ranges for the pseudo-registers and thus help the auto-inc-dec and RA passes.

Hi Eric, Thanks for your explanation.
It seems the unroller tends to replace:

   use(i)
   i = i + 1;
   ...
   use(i)
   i = i + 1;
   ...
   use(i)
   i = i + 1;
   ...

type of codes by:

   use(i)
   i0 = i + 1
   ...
   use(i)
   i = i0 + 1
   ...
   use(i)
   i = i0 + 2
   ...

I understand this splits long live range of "i" into short ones, but
since we have -fweb pass which does below transformation:


   use(i)
   i = i + 1;
   ...
   use(i)
   i = i + 1;
   ...
   use(i)
   i = i + 1;
   ...

into:

   use(i)
   i0 = i + 1
   ...
   use(i0)
   i1 = i0 + 1
   ...
   use(i1)
   i = i0 + 2
   ...

Why would we want "-fsplit-ivs-in-unroller" in the first place? As far
as live range is concerned, it seems "-fweb" works as good as
"-fsplit-ivs-in-unroller".

Thanks in advance.

--
Best Regards.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]