From cebbaa2a84586a7345837f74a53b7a0263bf29ee Mon Sep 17 00:00:00 2001 From: "Vladimir N. Makarov" Date: Fri, 8 Mar 2024 14:48:33 -0500 Subject: [PATCH] [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. --- gcc/lra-assigns.cc | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/gcc/lra-assigns.cc b/gcc/lra-assigns.cc index d1b2b35ffc9..7dfa6f70941 100644 --- a/gcc/lra-assigns.cc +++ b/gcc/lra-assigns.cc @@ -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 {