commit 44430ef3d8ba75692efff5f6969d5610134566d3
Author: Vladimir N. Makarov <vmakarov@redhat.com>
Date: Mon May 13 10:12:11 2024 -0400
[PR115013][LRA]: Modify register starvation recognition
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.
@@ -2674,8 +2674,9 @@ process_alt_operands (int only_alternative)
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]);
@@ -3250,6 +3251,7 @@ process_alt_operands (int only_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]))