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

Reply via email to