Skip to content
Snippets Groups Projects
Commit dd6247cb authored by H.J. Lu's avatar H.J. Lu
Browse files

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: default avatarH.J. Lu <hjl.tools@gmail.com>
parent cf24c0fa
No related branches found
No related tags found
Loading
Showing
with 183 additions and 24 deletions
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment