aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/openmp.c
diff options
context:
space:
mode:
authorH.J. Lu <hongjiu.lu@intel.com>2015-10-27 14:29:31 +0000
committerH.J. Lu <hjl@gcc.gnu.org>2015-10-27 07:29:31 -0700
commit55015e590fc5f020107c467ae62166f5ec10a52b (patch)
tree7857a8fb40fac9dc1241869f80d69f38b3cba602 /gcc/fortran/openmp.c
parent23a372296360f366e385c187c70a34b97cede2ab (diff)
downloadgcc-55015e590fc5f020107c467ae62166f5ec10a52b.zip
gcc-55015e590fc5f020107c467ae62166f5ec10a52b.tar.gz
gcc-55015e590fc5f020107c467ae62166f5ec10a52b.tar.bz2
Properly handle -fno-plt in ix86_expand_call
prepare_call_address in calls.c is the wrong place to handle -fno-plt. We shoudn't force function address into register and hope that load function address via GOT and indirect call via register will be folded into indirect call via GOT, which doesn't always happen. Also non-PIC case can only be handled in backend. Instead, backend should expand external function call into indirect call via GOT for -fno-plt. This patch reverts -fno-plt in prepare_call_address and handles it in ix86_expand_call. Other backends may need similar changes to support -fno-plt. Alternately, we can introduce a target hook to indicate whether an external function should be called via register for -fno-plt so that i386 backend can disable it in prepare_call_address. gcc/ PR target/67215 * calls.c (prepare_call_address): Don't handle -fno-plt here. * config/i386/i386.c (ix86_expand_call): Generate indirect call via GOT for -fno-plt. Support indirect call via GOT for x32. * config/i386/predicates.md (sibcall_memory_operand): Allow GOT memory operand. gcc/testsuite/ PR target/67215 * gcc.target/i386/pr67215-1.c: New test. * gcc.target/i386/pr67215-2.c: Likewise. * gcc.target/i386/pr67215-3.c: Likewise. From-SVN: r229444
Diffstat (limited to 'gcc/fortran/openmp.c')
0 files changed, 0 insertions, 0 deletions