-
- Downloads
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.tools@gmail.com>
Showing
- gcc/config/i386/constraints.md 10 additions, 12 deletionsgcc/config/i386/constraints.md
- gcc/config/i386/i386-expand.cc 9 additions, 7 deletionsgcc/config/i386/i386-expand.cc
- gcc/config/i386/i386-protos.h 1 addition, 0 deletionsgcc/config/i386/i386-protos.h
- gcc/config/i386/i386.cc 1 addition, 1 deletiongcc/config/i386/i386.cc
- gcc/config/i386/i386.md 3 additions, 3 deletionsgcc/config/i386/i386.md
- gcc/config/i386/predicates.md 3 additions, 1 deletiongcc/config/i386/predicates.md
- gcc/testsuite/gcc.target/i386/pr118713-1-x32.c 8 additions, 0 deletionsgcc/testsuite/gcc.target/i386/pr118713-1-x32.c
- gcc/testsuite/gcc.target/i386/pr118713-1.c 14 additions, 0 deletionsgcc/testsuite/gcc.target/i386/pr118713-1.c
- gcc/testsuite/gcc.target/i386/pr118713-10-x32.c 8 additions, 0 deletionsgcc/testsuite/gcc.target/i386/pr118713-10-x32.c
- gcc/testsuite/gcc.target/i386/pr118713-10.c 15 additions, 0 deletionsgcc/testsuite/gcc.target/i386/pr118713-10.c
- gcc/testsuite/gcc.target/i386/pr118713-11-x32.c 8 additions, 0 deletionsgcc/testsuite/gcc.target/i386/pr118713-11-x32.c
- gcc/testsuite/gcc.target/i386/pr118713-11.c 14 additions, 0 deletionsgcc/testsuite/gcc.target/i386/pr118713-11.c
- gcc/testsuite/gcc.target/i386/pr118713-12-x32.c 8 additions, 0 deletionsgcc/testsuite/gcc.target/i386/pr118713-12-x32.c
- gcc/testsuite/gcc.target/i386/pr118713-12.c 14 additions, 0 deletionsgcc/testsuite/gcc.target/i386/pr118713-12.c
- gcc/testsuite/gcc.target/i386/pr118713-2-x32.c 8 additions, 0 deletionsgcc/testsuite/gcc.target/i386/pr118713-2-x32.c
- gcc/testsuite/gcc.target/i386/pr118713-2.c 15 additions, 0 deletionsgcc/testsuite/gcc.target/i386/pr118713-2.c
- gcc/testsuite/gcc.target/i386/pr118713-3-x32.c 8 additions, 0 deletionsgcc/testsuite/gcc.target/i386/pr118713-3-x32.c
- gcc/testsuite/gcc.target/i386/pr118713-3.c 14 additions, 0 deletionsgcc/testsuite/gcc.target/i386/pr118713-3.c
- gcc/testsuite/gcc.target/i386/pr118713-4-x32.c 8 additions, 0 deletionsgcc/testsuite/gcc.target/i386/pr118713-4-x32.c
- gcc/testsuite/gcc.target/i386/pr118713-4.c 14 additions, 0 deletionsgcc/testsuite/gcc.target/i386/pr118713-4.c
Loading