[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:
parent
0e850eff58
commit
cebbaa2a84
1 changed files with 13 additions and 7 deletions
|
@ -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
|
||||
{
|
||||
|
|
Loading…
Add table
Reference in a new issue