[Patch, reload, tentative, PR 71627] Tweak conditions in find_valid_class_1

Senthil Kumar Selvaraj senthil_kumar.selvaraj@atmel.com
Tue Oct 18 12:16:00 GMT 2016


Bernd Schmidt writes:

> On 10/13/2016 08:57 AM, Senthil Kumar Selvaraj wrote:
>>
>> 2016-10-13  Senthil Kumar Selvaraj  <senthil_kumar.selvaraj@atmel.com>
>>
>> 	* reload.c (find_valid_class_1): Allow regclass if atleast one
>> 	regno in class is ok. Compute and use rclass size based on
>> 	actually available regnos for mode in rclass.
>>
>> gcc/testsuite/ChangeLog:
>>
>> 2016-10-13  Senthil Kumar Selvaraj  <senthil_kumar.selvaraj@atmel.com>
>> 	
>> 	* gcc.target/avr/pr71627.c: New.
>>
>>
>> Index: gcc/reload.c
>> ===================================================================
>> --- gcc/reload.c	(revision 240989)
>> +++ gcc/reload.c	(working copy)
>> @@ -711,31 +711,36 @@
>>    enum reg_class best_class = NO_REGS;
>>    unsigned int best_size = 0;
>>    int cost;
>> +  unsigned int computed_rclass_sizes[N_REG_CLASSES] = { 0 };
>
> As far as I can tell you're only accessing this as 
> computed_rclass_size[rclass], i.e. with the current class in the loop. 
> So I don't think you need the array at all, just a computed_size 
> variable in the loop?

Yes - I mechanically replaced the original array with the computed one.
A variable would suffice.
>
>> +      for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
>> +        {
>> +          if (in_hard_reg_set_p (reg_class_contents[rclass], mode, regno))
>> +            {
>> +              atleast_one_regno_ok = 1;
>> +              if (HARD_REGNO_MODE_OK (regno, mode))
>> +                computed_rclass_sizes[rclass]++;
>> +            }
>> +        }
>
> Don't you want to also ensure HARD_REGNO_MODE_OK before claiming that 
> atleast_one_regno_ok? Maybe I'm forgetting the motivation but this seems 
> odd. If so, the variable becomes unnecessary, just check the computed size.

True again - the original intention was to prevent the best_xxx
variables from getting set if no regno was in_hard_reg_set. Now the
computed class size would be zero, so the variable is unnecessary.

Will do both the changes and re-run the reg tests. Ok for trunk if the
tests pass for x86_64-pc-linux and avr?

Regards
Senthil



More information about the Gcc-patches mailing list