[PATCH 01/11] Add __builtin_speculation_safe_value
Richard Earnshaw
Richard.Earnshaw@arm.com
Fri Jul 27 09:38:00 GMT 2018
This patch defines a new intrinsic function
__builtin_speculation_safe_value. A generic default implementation is
defined which will attempt to use the backend pattern
"speculation_safe_barrier". If this pattern is not defined, or if it
is not available, then the compiler will emit a warning, but
compilation will continue.
Note that the test spec-barrier-1.c will currently fail on all
targets. This is deliberate, the failure will go away when
appropriate action is taken for each target backend.
gcc:
* builtin-types.def (BT_FN_PTR_PTR_VAR): New function type.
(BT_FN_I1_I1_VAR, BT_FN_I2_I2_VAR, BT_FN_I4_I4_VAR): Likewise.
(BT_FN_I8_I8_VAR, BT_FN_I16_I16_VAR): Likewise.
* builtin-attrs.def (ATTR_NOVOPS_NOTHROW_LEAF_LIST): New attribute
list.
* builtins.def (BUILT_IN_SPECULATION_SAFE_VALUE_N): New builtin.
(BUILT_IN_SPECULATION_SAFE_VALUE_PTR): New internal builtin.
(BUILT_IN_SPECULATION_SAFE_VALUE_1): Likewise.
(BUILT_IN_SPECULATION_SAFE_VALUE_2): Likewise.
(BUILT_IN_SPECULATION_SAFE_VALUE_4): Likewise.
(BUILT_IN_SPECULATION_SAFE_VALUE_8): Likewise.
(BUILT_IN_SPECULATION_SAFE_VALUE_16): Likewise.
* builtins.c (expand_speculation_safe_value): New function.
(expand_builtin): Call it.
* doc/cpp.texi: Document predefine __HAVE_SPECULATION_SAFE_VALUE.
* doc/extend.texi: Document __builtin_speculation_safe_value.
* doc/md.texi: Document "speculation_barrier" pattern.
* doc/tm.texi.in: Pull in TARGET_SPECULATION_SAFE_VALUE and
TARGET_HAVE_SPECULATION_SAFE_VALUE.
* doc/tm.texi: Regenerated.
* target.def (have_speculation_safe_value, speculation_safe_value): New
hooks.
* targhooks.c (default_have_speculation_safe_value): New function.
(default_speculation_safe_value): New function.
* targhooks.h (default_have_speculation_safe_value): Add prototype.
(default_speculation_safe_value): Add prototype.
c-family:
* c-common.c (speculation_safe_resolve_call): New function.
(speculation_safe_resolve_params): New function.
(speculation_safe_resolve_return): New function.
(resolve_overloaded_builtin): Handle __builtin_speculation_safe_value.
* c-cppbuiltin.c (c_cpp_builtins): Add pre-define for
__HAVE_SPECULATION_SAFE_VALUE.
testsuite:
* c-c++-common/spec-barrier-1.c: New test.
* c-c++-common/spec-barrier-2.c: New test.
* gcc.dg/spec-barrier-3.c: New test.
---
gcc/builtin-attrs.def | 2 +
gcc/builtin-types.def | 6 +
gcc/builtins.c | 60 ++++++++++
gcc/builtins.def | 22 ++++
gcc/c-family/c-common.c | 164 ++++++++++++++++++++++++++++
gcc/c-family/c-cppbuiltin.c | 7 +-
gcc/doc/cpp.texi | 4 +
gcc/doc/extend.texi | 91 +++++++++++++++
gcc/doc/md.texi | 15 +++
gcc/doc/tm.texi | 31 ++++++
gcc/doc/tm.texi.in | 4 +
gcc/target.def | 35 ++++++
gcc/targhooks.c | 32 ++++++
gcc/targhooks.h | 3 +
gcc/testsuite/c-c++-common/spec-barrier-1.c | 38 +++++++
gcc/testsuite/c-c++-common/spec-barrier-2.c | 17 +++
gcc/testsuite/gcc.dg/spec-barrier-3.c | 13 +++
17 files changed, 543 insertions(+), 1 deletion(-)
create mode 100644 gcc/testsuite/c-c++-common/spec-barrier-1.c
create mode 100644 gcc/testsuite/c-c++-common/spec-barrier-2.c
create mode 100644 gcc/testsuite/gcc.dg/spec-barrier-3.c
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Add-__builtin_speculation_safe_value.patch
Type: text/x-patch
Size: 27259 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20180727/8cd5aac5/attachment.bin>
More information about the Gcc-patches
mailing list