mbox series

[v5,0/3] x86: Add general_regs_only function attribute

Message ID 20210421134051.4174715-1-hjl.tools@gmail.com
Headers show
Series x86: Add general_regs_only function attribute | expand

Message

H.J. Lu April 21, 2021, 1:40 p.m. UTC
I realized that

commit 87c753ac241f25d222d46ba1ac66ceba89d6a200
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Fri Aug 21 09:42:49 2020 -0700

    x86: Add target("general-regs-only") function attribute

is incomplete since it is impossible to call integer intrinsics from
a function with general-regs-only target attribute.  We need to add a
general_regs_only function attribute to go with it to mark functions
which use only general purpose registers.  When making inlining
decisions on such functions, x86 backend can exclude non-GPR compiler
options.  The general_regs_only attribute should be added to all x86
intrinsics which use only general purpose registers.

H.J. Lu (3):
  x86: Move OPTION_MASK_* to i386-common.h
  x86: Add general_regs_only function attribute
  x86: Add general_regs_only attribute to MWAIT intrinsics

 gcc/common/config/i386/i386-common.c      | 299 ------------------
 gcc/common/config/i386/i386-common.h      | 317 +++++++++++++++++++
 gcc/config/i386/adxintrin.h               |  18 +-
 gcc/config/i386/bmi2intrin.h              |  24 +-
 gcc/config/i386/bmiintrin.h               |  92 ++++--
 gcc/config/i386/cetintrin.h               |  33 +-
 gcc/config/i386/cldemoteintrin.h          |   3 +-
 gcc/config/i386/clflushoptintrin.h        |   3 +-
 gcc/config/i386/clwbintrin.h              |   3 +-
 gcc/config/i386/clzerointrin.h            |   4 +-
 gcc/config/i386/enqcmdintrin.h            |   6 +-
 gcc/config/i386/fxsrintrin.h              |  12 +-
 gcc/config/i386/hresetintrin.h            |   3 +-
 gcc/config/i386/i386-options.c            |   2 +
 gcc/config/i386/i386.c                    |  29 +-
 gcc/config/i386/i386.h                    |   1 +
 gcc/config/i386/ia32intrin.h              |  94 ++++--
 gcc/config/i386/lwpintrin.h               |  24 +-
 gcc/config/i386/lzcntintrin.h             |  20 +-
 gcc/config/i386/movdirintrin.h            |   9 +-
 gcc/config/i386/mwaitintrin.h             |   6 +-
 gcc/config/i386/mwaitxintrin.h            |   8 +-
 gcc/config/i386/pconfigintrin.h           |   3 +-
 gcc/config/i386/pkuintrin.h               |   6 +-
 gcc/config/i386/popcntintrin.h            |   8 +-
 gcc/config/i386/rdseedintrin.h            |   9 +-
 gcc/config/i386/rtmintrin.h               |   9 +-
 gcc/config/i386/serializeintrin.h         |   8 +-
 gcc/config/i386/sgxintrin.h               |   9 +-
 gcc/config/i386/tbmintrin.h               |  80 +++--
 gcc/config/i386/tsxldtrkintrin.h          |   6 +-
 gcc/config/i386/uintrintrin.h             |  12 +-
 gcc/config/i386/waitpkgintrin.h           |   9 +-
 gcc/config/i386/wbnoinvdintrin.h          |   3 +-
 gcc/config/i386/x86gprintrin.h            |  45 ++-
 gcc/config/i386/xsavecintrin.h            |   6 +-
 gcc/config/i386/xsaveintrin.h             |  18 +-
 gcc/config/i386/xsaveoptintrin.h          |   6 +-
 gcc/config/i386/xsavesintrin.h            |  12 +-
 gcc/config/i386/xtestintrin.h             |   3 +-
 gcc/doc/extend.texi                       |   5 +
 gcc/testsuite/gcc.target/i386/pr99744-3.c |  13 +
 gcc/testsuite/gcc.target/i386/pr99744-4.c | 357 ++++++++++++++++++++++
 gcc/testsuite/gcc.target/i386/pr99744-5.c |  25 ++
 44 files changed, 1178 insertions(+), 484 deletions(-)
 create mode 100644 gcc/common/config/i386/i386-common.h
 create mode 100644 gcc/testsuite/gcc.target/i386/pr99744-3.c
 create mode 100644 gcc/testsuite/gcc.target/i386/pr99744-4.c
 create mode 100644 gcc/testsuite/gcc.target/i386/pr99744-5.c