My recent patch to recognize reg starvation resulted in few GCC test
failures. The following patch fixes this by using more accurate
starvation calculation and ignoring small reg classes.
gcc/ChangeLog:
PR rtl-optimization/115013
* lra-constraints.cc (process_alt_operands): Update all_used_nregs
only for winreg. Ignore reg starvation for small reg classes.
if (early_clobber_p
|| curr_static_id->operand[nop].type != OP_OUT)
{
- all_used_nregs
- += ira_reg_class_min_nregs[this_alternative][mode];
+ if (winreg)
+ all_used_nregs
+ += ira_reg_class_min_nregs[this_alternative][mode];
all_this_alternative
= (reg_class_subunion
[all_this_alternative][this_alternative]);
overall += LRA_MAX_REJECT;
}
if (all_this_alternative != NO_REGS
+ && !SMALL_REGISTER_CLASS_P (all_this_alternative)
&& all_used_nregs != 0 && all_reload_nregs != 0
&& (all_used_nregs + all_reload_nregs + 1
>= ira_class_hard_regs_num[all_this_alternative]))