https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84530
--- Comment #4 from hjl at gcc dot gnu.org <hjl at gcc dot gnu.org> --- Author: hjl Date: Fri Mar 2 13:05:18 2018 New Revision: 258134 URL: https://gcc.gnu.org/viewcvs?rev=258134&root=gcc&view=rev Log: i386: Update -mfunction-return= for return with pop When -mfunction-return= is used, simple_return_pop_internal should pop return address into ECX register, adjust stack by bytes to pop from stack and jump to the return thunk via ECX register. Revision 257992 removed the bool argument from ix86_output_indirect_jmp. Update comments to reflect it. Tested on i686 and x86-64. gcc/ Backport from mainline 2018-02-26 H.J. Lu <hongjiu...@intel.com> * config/i386/i386.c (ix86_output_indirect_jmp): Update comments. 2018-02-26 H.J. Lu <hongjiu...@intel.com> PR target/84530 * config/i386/i386-protos.h (ix86_output_indirect_jmp): Remove the bool argument. (ix86_output_indirect_function_return): New prototype. (ix86_split_simple_return_pop_internal): Likewise. * config/i386/i386.c (indirect_return_via_cx): New. (indirect_return_via_cx_bnd): Likewise. (indirect_thunk_name): Handle return va CX_REG. (output_indirect_thunk_function): Create alias for __x86_return_thunk_[re]cx and __x86_return_thunk_[re]cx_bnd. (ix86_output_indirect_jmp): Remove the bool argument. (ix86_output_indirect_function_return): New function. (ix86_split_simple_return_pop_internal): Likewise. * config/i386/i386.md (*indirect_jump): Don't pass false to ix86_output_indirect_jmp. (*tablejump_1): Likewise. (simple_return_pop_internal): Change it to define_insn_and_split. Call ix86_split_simple_return_pop_internal to split it for -mfunction-return=. (simple_return_indirect_internal): Call ix86_output_indirect_function_return instead of ix86_output_indirect_jmp. gcc/testsuite/ Backport from mainline 2018-02-26 H.J. Lu <hongjiu...@intel.com> PR target/84530 * gcc.target/i386/ret-thunk-22.c: New test. * gcc.target/i386/ret-thunk-23.c: Likewise. * gcc.target/i386/ret-thunk-24.c: Likewise. * gcc.target/i386/ret-thunk-25.c: Likewise. * gcc.target/i386/ret-thunk-26.c: Likewise. Added: branches/gcc-7-branch/gcc/testsuite/gcc.target/i386/ret-thunk-22.c branches/gcc-7-branch/gcc/testsuite/gcc.target/i386/ret-thunk-23.c branches/gcc-7-branch/gcc/testsuite/gcc.target/i386/ret-thunk-24.c branches/gcc-7-branch/gcc/testsuite/gcc.target/i386/ret-thunk-25.c branches/gcc-7-branch/gcc/testsuite/gcc.target/i386/ret-thunk-26.c Modified: branches/gcc-7-branch/gcc/ChangeLog branches/gcc-7-branch/gcc/config/i386/i386-protos.h branches/gcc-7-branch/gcc/config/i386/i386.c branches/gcc-7-branch/gcc/config/i386/i386.md branches/gcc-7-branch/gcc/testsuite/ChangeLog