Changes in v2: 1. Add ix86_tls_get_addr_abi and use it to set CALL_INSN_ABI_ID.
--- This patch set implements TARGET_FNTYPE_ABI for x86 to avoid unnecessary spills when calling no_caller_saved_registers functions: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=124798 and spill callee-saved registers when calling __tls_get_addr from a ms_abi function: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=125436 The first 3 patches update the x86 backend for TARGET_FNTYPE_ABI and the last one implements TARGET_FNTYPE_ABI. H.J. Lu (1): x86: Implement TARGET_FNTYPE_ABI Richard Sandiford (3): i386: Split out call_saved_registers_type detection i386: Avoid reading call_used_regs i386: Avoid always-true condition gcc/config/i386/i386-expand.cc | 113 +----- gcc/config/i386/i386-features.cc | 5 +- gcc/config/i386/i386-options.cc | 152 ++++---- gcc/config/i386/i386-protos.h | 5 +- gcc/config/i386/i386.cc | 361 ++++++++++++++---- gcc/config/i386/i386.md | 30 +- gcc/testsuite/gcc.target/i386/abi-mix-1.c | 20 + gcc/testsuite/gcc.target/i386/abi-mix-2.c | 6 + .../gcc.target/i386/no-callee-saved-18.c | 2 - .../gcc.target/i386/no-callee-saved-19b.c | 32 +- .../gcc.target/i386/no-callee-saved-19d.c | 6 +- .../gcc.target/i386/no-callee-saved-19e.c | 33 +- .../gcc.target/i386/no-callee-saved-2.c | 10 +- .../gcc.target/i386/no-callee-saved-20.c | 92 +++++ .../gcc.target/i386/no-callee-saved-8.c | 8 +- .../gcc.target/i386/no-callee-saved-9.c | 10 +- .../gcc.target/i386/no-caller-saved-1-ms.c | 50 +++ .../gcc.target/i386/no-caller-saved-1-sysv.c | 46 +++ .../gcc.target/i386/no-caller-saved-1.c | 50 +++ .../gcc.target/i386/no-caller-saved-2.c | 49 +++ .../gcc.target/i386/no-caller-saved-3.c | 49 +++ .../gcc.target/i386/no-caller-saved-4.c | 44 +++ .../gcc.target/i386/no-caller-saved-5.c | 34 ++ .../gcc.target/i386/no-caller-saved-6.c | 34 ++ .../gcc.target/i386/no-caller-saved-7.c | 49 +++ gcc/testsuite/gcc.target/i386/pr125436-1a.c | 130 +++++++ gcc/testsuite/gcc.target/i386/pr125436-1b.c | 81 ++++ gcc/testsuite/gcc.target/i386/pr125436-2a.c | 132 +++++++ gcc/testsuite/gcc.target/i386/pr125436-2b.c | 83 ++++ gcc/testsuite/gcc.target/i386/pr125436-3.c | 88 +++++ gcc/testsuite/gcc.target/i386/pr125436-4.c | 88 +++++ .../gcc.target/i386/preserve-none-14.c | 2 - .../gcc.target/i386/preserve-none-23.c | 2 - .../gcc.target/i386/preserve-none-7.c | 10 +- 34 files changed, 1587 insertions(+), 319 deletions(-) create mode 100644 gcc/testsuite/gcc.target/i386/abi-mix-1.c create mode 100644 gcc/testsuite/gcc.target/i386/abi-mix-2.c create mode 100644 gcc/testsuite/gcc.target/i386/no-callee-saved-20.c create mode 100644 gcc/testsuite/gcc.target/i386/no-caller-saved-1-ms.c create mode 100644 gcc/testsuite/gcc.target/i386/no-caller-saved-1-sysv.c create mode 100644 gcc/testsuite/gcc.target/i386/no-caller-saved-1.c create mode 100644 gcc/testsuite/gcc.target/i386/no-caller-saved-2.c create mode 100644 gcc/testsuite/gcc.target/i386/no-caller-saved-3.c create mode 100644 gcc/testsuite/gcc.target/i386/no-caller-saved-4.c create mode 100644 gcc/testsuite/gcc.target/i386/no-caller-saved-5.c create mode 100644 gcc/testsuite/gcc.target/i386/no-caller-saved-6.c create mode 100644 gcc/testsuite/gcc.target/i386/no-caller-saved-7.c create mode 100644 gcc/testsuite/gcc.target/i386/pr125436-1a.c create mode 100644 gcc/testsuite/gcc.target/i386/pr125436-1b.c create mode 100644 gcc/testsuite/gcc.target/i386/pr125436-2a.c create mode 100644 gcc/testsuite/gcc.target/i386/pr125436-2b.c create mode 100644 gcc/testsuite/gcc.target/i386/pr125436-3.c create mode 100644 gcc/testsuite/gcc.target/i386/pr125436-4.c -- 2.54.0
