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?
+ 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.
Bernd