Bernd Schmidt writes: > On 10/13/2016 08:57 AM, Senthil Kumar Selvaraj wrote: >> >> 2016-10-13 Senthil Kumar Selvaraj <senthil_kumar.selva...@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.selva...@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