This is the mail archive of the
gcc-cvs@gcc.gnu.org
mailing list for the GCC project.
r231903 - in /trunk/gcc: ChangeLog config/i386/...
- From: uros at gcc dot gnu dot org
- To: gcc-cvs at gcc dot gnu dot org
- Date: Tue, 22 Dec 2015 15:38:25 -0000
- Subject: r231903 - in /trunk/gcc: ChangeLog config/i386/...
Author: uros
Date: Tue Dec 22 15:38:25 2015
New Revision: 231903
URL: https://gcc.gnu.org/viewcvs?rev=231903&root=gcc&view=rev
Log:
[PATCH] Use call-clobbered register for sibcall via GOT
From: H.J. Lu <hongjiu.lu@intel.com>
Since sibcall never returns, we can only use call-clobbered register as
GOT base. Otherwise, callee-saved register used as GOT base won't be
properly restored. sibcall_memory_operand is changed to allow 32-bit
GOT slot only with pseudo register as GOT base for RTL expansion. 2
new patterns, *sibcall_GOT_32 and *sibcall_value_GOT_32, are added to
expose GOT base register to register allocator so that call-clobbered
register will be used for GOT base.
gcc/
PR target/68937
* config/i386/i386.c (ix86_function_ok_for_sibcall): Count
call to global function via GOT slot as indirect call.
* config/i386/i386.md (*sibcall_GOT_32): New pattern.
(*sibcall_value_GOT_32): Likewise.
* config/i386/predicates.md (sibcall_memory_operand): Rewrite.
Allow 32-bit GOT slot only with pseudo register as GOT base.
(GOT32_symbol_operand): New predicate.
gcc/testsuite/
PR target/68937
* gcc.target/i386/pr68937-1.c: New test.
* gcc.target/i386/pr68937-2.c: Likewise.
* gcc.target/i386/pr68937-3.c: Likewise.
* gcc.target/i386/pr68937-4.c: Likewise.
* gcc.target/i386/pr68937-5.c: Likewise.
* gcc.target/i386/pr68937-6.c: Likewise.
Added:
trunk/gcc/testsuite/gcc.target/i386/pr68937-1.c
trunk/gcc/testsuite/gcc.target/i386/pr68937-2.c
trunk/gcc/testsuite/gcc.target/i386/pr68937-3.c
trunk/gcc/testsuite/gcc.target/i386/pr68937-4.c
trunk/gcc/testsuite/gcc.target/i386/pr68937-5.c
trunk/gcc/testsuite/gcc.target/i386/pr68937-6.c
Modified:
trunk/gcc/ChangeLog
trunk/gcc/config/i386/i386.c
trunk/gcc/config/i386/i386.md
trunk/gcc/config/i386/predicates.md
trunk/gcc/testsuite/ChangeLog