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

--- Comment #1 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by H.J. Lu <h...@gcc.gnu.org>:

https://gcc.gnu.org/g:dd6247cb8fc11a15e23e949092f89d24ff329209

commit r15-7318-gdd6247cb8fc11a15e23e949092f89d24ff329209
Author: H.J. Lu <hjl.to...@gmail.com>
Date:   Fri Jan 31 12:29:04 2025 +0800

    x86: Handle TARGET_INDIRECT_BRANCH_REGISTER for -fno-plt

    If TARGET_INDIRECT_BRANCH_REGISTER is true, indirect call and jump should
    use register, not memory.  Update Bs, Bw and Bz constraints to disable
    indirect call over memmory if TARGET_INDIRECT_BRANCH_REGISTER true, change
    x32 call over GOT slot to call over register and also disable sibcall
    over memory.

    gcc/

            PR target/118713
            * config/i386/constraints.md (Bs): Always disable if
            TARGET_INDIRECT_BRANCH_REGISTER is true.
            (Bw): Likewise.
            * config/i386/i386-expand.cc (ix86_expand_call): Force indirect
            call via register for x32 GOT slot call if
            TARGET_INDIRECT_BRANCH_REGISTER is true.
            * config/i386/i386-protos.h (ix86_nopic_noplt_attribute_p): New.
            * config/i386/i386.cc (ix86_nopic_noplt_attribute_p): Make it
            global.
            * config/i386/i386.md (*call_got_x32): Disable indirect call via
            memory for TARGET_INDIRECT_BRANCH_REGISTER.
            (*call_value_got_x32): Likewise.
            (*sibcall_value_pop_memory): Likewise.
            * config/i386/predicates.md (constant_call_address_operand):
            Return false if both TARGET_INDIRECT_BRANCH_REGISTER and
            ix86_nopic_noplt_attribute_p are true.

    gcc/testsuite/

            PR target/118713
            * gcc.target/i386/pr118713-1-x32.c: New test.
            * gcc.target/i386/pr118713-1.c: Likewise.
            * gcc.target/i386/pr118713-2-x32.c: Likewise.
            * gcc.target/i386/pr118713-2.c: Likewise.
            * gcc.target/i386/pr118713-3-x32.c: Likewise.
            * gcc.target/i386/pr118713-3.c: Likewise.
            * gcc.target/i386/pr118713-4-x32.c: Likewise.
            * gcc.target/i386/pr118713-4.c: Likewise.
            * gcc.target/i386/pr118713-5-x32.c: Likewise.
            * gcc.target/i386/pr118713-5.c: Likewise.
            * gcc.target/i386/pr118713-6-x32.c: Likewise.
            * gcc.target/i386/pr118713-6.c: Likewise.
            * gcc.target/i386/pr118713-7-x32.c: Likewise.
            * gcc.target/i386/pr118713-7.c: Likewise.
            * gcc.target/i386/pr118713-8-x32.c: Likewise.
            * gcc.target/i386/pr118713-8.c: Likewise.
            * gcc.target/i386/pr118713-9-x32.c: Likewise.
            * gcc.target/i386/pr118713-9.c: Likewise.
            * gcc.target/i386/pr118713-10-x32.c: Likewise.
            * gcc.target/i386/pr118713-10.c: Likewise.
            * gcc.target/i386/pr118713-11-x32.c: Likewise.
            * gcc.target/i386/pr118713-11.c: Likewise.
            * gcc.target/i386/pr118713-12-x32.c: Likewise.
            * gcc.target/i386/pr118713-12.c: Likewise.

    Signed-off-by: H.J. Lu <hjl.to...@gmail.com>

Reply via email to