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

--- Comment #20 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-13 branch has been updated by YunQiang Su <s...@gcc.gnu.org>:

https://gcc.gnu.org/g:3be8fa7b19d218ca5812d71801e3e83ee2260ea0

commit r13-8809-g3be8fa7b19d218ca5812d71801e3e83ee2260ea0
Author: YunQiang Su <s...@gcc.gnu.org>
Date:   Wed May 29 02:28:25 2024 +0800

    MIPS16: Mark $2/$3 as clobbered if GP is used

    PR Target/84790.
    The gp init sequence
            li      $2,%hi(_gp_disp)
            addiu   $3,$pc,%lo(_gp_disp)
            sll     $2,16
            addu    $2,$3
    is generated directly in `mips_output_function_prologue`, and does
    not appear in the RTL.

    So the IRA/IPA passes are not aware that $2/$3 have been clobbered,
    so they may be used for cross (local) function call.

    Let's mark $2/$3 clobber both:
      - Just after the UNSPEC_GP RTL of a function;
      - Just after a function call.

    Reported-by: Matthias Schiffer <mschif...@universe-factory.net>
    Origin-Patch-by: Felix Fietkau <n...@nbd.name>.

    gcc
            * config/mips/mips.cc(mips16_gp_pseudo_reg): Mark
            MIPS16_PIC_TEMP and MIPS_PROLOGUE_TEMP clobbered.
            (mips_emit_call_insn): Mark MIPS16_PIC_TEMP and
            MIPS_PROLOGUE_TEMP clobbered if MIPS16 and CALL_CLOBBERED_GP.

    (cherry picked from commit 915440eed21de367cb41857afb5273aff5bcb737)

Reply via email to