This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH 01/11] Add __builtin_speculation_safe_value
On Fri, 27 Jul 2018, Richard Earnshaw wrote:
>
> 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.
OK.
Thanks,
Richard.
> 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
>
>
--
Richard Biener <rguenther@suse.de>
SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nuernberg)