From: Vladimir N. Makarov Date: Fri, 8 Mar 2024 19:48:33 +0000 (-0500) Subject: [PR113790][LRA]: Fixing LRA ICE on riscv64 X-Git-Tag: basepoints/gcc-15~738 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=cebbaa2a84586a7345837f74a53b7a0263bf29ee;p=thirdparty%2Fgcc.git [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. --- diff --git a/gcc/lra-assigns.cc b/gcc/lra-assigns.cc index d1b2b35ffc95..7dfa6f70941e 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 {