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

--- Comment #3 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by hongtao Liu <[email protected]>:

https://gcc.gnu.org/g:6bc343fa183a01fa30f70d2c0b70d01e4bd78d62

commit r17-4550-g6bc343fa183a01fa30f70d2c0b70d01e4bd78d62
Author: liuhongt <[email protected]>
Date:   Sun Sep 20 23:09:00 2026 -0700

    i386: Don't split V2DF load when the adjusted address is invalid [PR127500]

    ix86_split_stlf_stall_load splits a V2DF load from a PARM_DECL into
    movlpd + movhpd, which needs the load address offset by 8.  When the
    original address already uses the largest encodable displacement, e.g.

      (mem/c:V2DF (plus:DI (reg/f:DI 7 sp)
                           (const_int 2147483640 [0x7ffffff8])))

    adding 8 gives 0x80000000, which is out of range for the signed 32-bit
    displacement field of an x86 address, and adjust_address ICEs in
    change_address_1 since the address can no longer be validated after
    reload.  Skip the split in that case.

    gcc/ChangeLog:

            PR target/127500
            * config/i386/i386.cc (ix86_split_stlf_stall_load): Don't split
            the load when the address adjusted by 8 is not a valid memory
            address.

    gcc/testsuite/ChangeLog:

            PR target/127500
            * gcc.target/i386/pr127500.c: New test.

Reply via email to