[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