From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1012) id 4D7F8385E012; Fri, 8 Mar 2024 19:53:44 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 4D7F8385E012 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1709927624; bh=3quleOWSDZLMG4RV1OWy42TFH55hD/X2x3UDKexIXYM=; h=From:To:Subject:Date:From; b=CX4kS2VlgEoHtW5MovgiVkWRBKXkO3i56rY3ChsW0XpoetozgRZ9IFh4yqi50AcRY 4dPBgN8NpQck9sU8Vx/29QkVzMIHnnhwVGsJJbVqJCQ1J4dx3EPgptx4lI8stcTUF9 MwoLJKJwRUlc53JaRO+m/uMsAhsmX+0gWFvW6avc= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Vladimir Makarov To: gcc-cvs@gcc.gnu.org Subject: [gcc r14-9401] [PR113790][LRA]: Fixing LRA ICE on riscv64 X-Act-Checkin: gcc X-Git-Author: Vladimir N. Makarov X-Git-Refname: refs/heads/master X-Git-Oldrev: 0e850eff58539fb79483664962fac6c46d65c79d X-Git-Newrev: cebbaa2a84586a7345837f74a53b7a0263bf29ee Message-Id: <20240308195344.4D7F8385E012@sourceware.org> Date: Fri, 8 Mar 2024 19:53:44 +0000 (GMT) List-Id: https://gcc.gnu.org/g:cebbaa2a84586a7345837f74a53b7a0263bf29ee commit r14-9401-gcebbaa2a84586a7345837f74a53b7a0263bf29ee Author: Vladimir N. Makarov Date: Fri Mar 8 14:48:33 2024 -0500 [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: --- 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 {