diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2015-12-16 12:34:57 -0800 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2015-12-17 16:54:16 -0800 |
commit | e4a7e066a8cdbb638fc5e1312c01f1043a2679fc (patch) | |
tree | 27d78f5c461ceb875934c338dbcce9e6a845c3c6 /fixincludes | |
parent | cfb00f7fa95bc1d713c849cb6a428035f8f9b7e0 (diff) | |
download | gcc-hjl/pr68937/master.tar.gz |
Use call-clobbered register for sibcall via GOThjl/pr68937/master
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.
Diffstat (limited to 'fixincludes')
0 files changed, 0 insertions, 0 deletions