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

--- Comment #11 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-12 branch has been updated by Georg-Johann Lay
<g...@gcc.gnu.org>:

https://gcc.gnu.org/g:5f4a60c43d5cd805add6529b4528c35893c283ae

commit r12-10602-g5f4a60c43d5cd805add6529b4528c35893c283ae
Author: Georg-Johann Lay <a...@gjlay.de>
Date:   Fri Jul 5 13:22:12 2024 +0200

    AVR: target/87376 - Use nop_general_operand for DImode inputs.

    The avr-dimode.md expanders have code like  emit_move_insn(acc_a,
operands[1])
    where acc_a is a hard register and operands[1] might be a non-generic
    address-space memory reference.  Such loads may clobber hard regs since
    some of them are implemented as libgcc calls /and/ 64-moves are
    expanded as eight byte-moves, so that acc_a or acc_b might be clobbered
    by such a load.

    This patch simply denies non-generic address-space references by using
    nop_general_operand for all avr-dimode.md input predicates.
    With the patch, all memory loads that require library calls are issued
    before the expander codes from avr-dimode.md are run.

            PR target/87376
    gcc/
            * config/avr/avr-dimode.md: Use "nop_general_operand" instead
            of "general_operand" as predicate for all input operands.

    gcc/testsuite/
            * gcc.target/avr/torture/pr87376.c: New test.

    (cherry picked from commit 23a0935262d6817097406578b1c70563f424804b)

Reply via email to