[PR113790][LRA]: Fixing LRA ICE on riscv64

LRA failed to consider all insn alternatives when non-reload pseudo
did not get a hard register.  This resulted in failure to generate
code by LRA.  The patch fixes this problem.

gcc/ChangeLog:

	PR target/113790
	* lra-assigns.cc (assign_by_spills): Set up all_spilled_pseudos
	for non-reload pseudo too.
This commit is contained in:
Vladimir N. Makarov 2024-03-08 14:48:33 -05:00
parent 0e850eff58
commit cebbaa2a84

View file

@ -1430,13 +1430,19 @@ assign_by_spills (void)
hard_regno = spill_for (regno, &all_spilled_pseudos, iter == 1);
if (hard_regno < 0)
{
if (reload_p) {
/* Put unassigned reload pseudo first in the
array. */
regno2 = sorted_pseudos[nfails];
sorted_pseudos[nfails++] = regno;
sorted_pseudos[i] = regno2;
}
if (reload_p)
{
/* Put unassigned reload pseudo first in the array. */
regno2 = sorted_pseudos[nfails];
sorted_pseudos[nfails++] = regno;
sorted_pseudos[i] = regno2;
}
else
{
/* Consider all alternatives on the next constraint
subpass. */
bitmap_set_bit (&all_spilled_pseudos, regno);
}
}
else
{