https://gcc.gnu.org/g:f8796015aa884d0310bf4252bdf844f6d1a27f52
commit f8796015aa884d0310bf4252bdf844f6d1a27f52 Author: Alexandre Oliva <ol...@adacore.com> Date: Sun Jun 22 16:19:51 2025 -0300 [lra] apply elimination offsets to MEM in autoinc address [PR120424] When attempting to bootstrap arm-linux-gnueabihf with {BOOT_C,T}FLAGS='-g -O2 -fnon-call-exceptions -fstack-clash-protection', gmp fails to build in stage2: gen-fac's mpz_and gets miscompiled. A pseudo is initialized before a loop and used in a PRE_INC load inside a loop. It gets spilled just as the fp2sp elimination is disabled, and only the initialization gets adjusted with elimination offsets. The unadjusted stack slot within the PRE_INC load ends up reloaded later, but only when the FP offset has already missed its chance to be adjusted. Arrange for lra_eliminate_regs_1 to adjust autoinc addresses that are MEMs themselves. for gcc/ChangeLog PR rtl-optimization/120424 * lra_eliminations.cc (lra_eliminate_regs_1): Adjust autoinc addresses that are MEMs. Diff: --- gcc/lra-eliminations.cc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/gcc/lra-eliminations.cc b/gcc/lra-eliminations.cc index 5713a9680523..9cdd0c5ff53a 100644 --- a/gcc/lra-eliminations.cc +++ b/gcc/lra-eliminations.cc @@ -571,6 +571,9 @@ lra_eliminate_regs_1 (rtx_insn *insn, rtx x, machine_mode mem_mode, case POST_INC: case PRE_DEC: case POST_DEC: + /* Recurse to adjust elimination offsets in a spilled pseudo. */ + if (GET_CODE (XEXP (x, 0)) == MEM) + break; /* We do not support elimination of a register that is modified. elimination_effects has already make sure that this does not happen. */ @@ -578,6 +581,9 @@ lra_eliminate_regs_1 (rtx_insn *insn, rtx x, machine_mode mem_mode, case PRE_MODIFY: case POST_MODIFY: + /* Recurse to adjust elimination offsets in a spilled pseudo. */ + if (GET_CODE (XEXP (x, 0)) == MEM) + break; /* We do not support elimination of a hard register that is modified. LRA has already make sure that this does not happen. The only remaining case we need to consider here is