https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116587

--- Comment #12 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Vladimir Makarov <vmaka...@gcc.gnu.org>:

https://gcc.gnu.org/g:56fc6a6d9edc9f9170285ef31c7f312608fad88c

commit r15-5529-g56fc6a6d9edc9f9170285ef31c7f312608fad88c
Author: Vladimir N. Makarov <vmaka...@redhat.com>
Date:   Wed Nov 20 14:25:41 2024 -0500

    [PR116587][LRA]: Fix last chance reload pseudo allocation

    On i686 PR116587 test compilation resulted in LRA failure to find
    registers for a reload insn pseudo.  The insn requires 6 regs for 4
    reload insn pseudos where two of them require 2 regs each.  But we
    have only 5 free regs as sp is a fixed reg, bp is fixed because of
    -fno-omit-frame-pointer, bx is assigned to pic_offset_table_pseudo
    because of -fPIC.  LRA spills pic_offset_table_pseudo as the last
    chance approach to allocate registers to the reload pseudo.  Although
    it makes 2 free registers for the unallocated reload pseudo requiring
    also 2 regs, the pseudo still can not be allocated as the 2 free regs
    are disjoint.  The patch spills all pseudos conflicting with the
    unallocated reload pseudo including already allocated reload insn
    pseudos, then standard LRA code allocates spilled pseudos requiring
    more one register first and avoid situation of the disjoint regs for
    reload pseudos requiring more one reg.

    gcc/ChangeLog:

            PR target/116587
            * lra-assigns.cc (find_all_spills_for): Consider all pseudos whose
            classes intersect given pseudo class.

    gcc/testsuite/ChangeLog:

            PR target/116587
            * gcc.target/i386/pr116587.c: New test.

Reply via email to