On Jan 8, 2018, at 8:06 AM, Richard Earnshaw (lists) <richard.earns...@arm.com> 
wrote:
> 
> On 08/01/18 02:20, Bill Schmidt wrote:
>> Hi Richard,
>> 
>> Unfortunately, I don't see any way that this will be useful for the ppc 
>> targets.  We don't
>> have a way to force resolution of a condition prior to continuing 
>> speculation, so this
>> will just introduce another comparison that we would speculate past.  For 
>> our mitigation
>> we will have to introduce an instruction that halts all speculation at that 
>> point, and place
>> it in front of all dangerous loads.  I wish it were otherwise.
> 
> So can't you make the builtin expand to (in pseudo code):
> 
>       if (bounds_check)
>         {
>           __asm ("barrier");
>           result = *ptr;
>          }
>        else
>         result = failval;

Could, but this just generates unnecessary code for Power.  We would instead 
generate

        __asm ("barrier");
        result = *ptr;

without any checks.  We would ignore everything but the first argument.

Thanks,
Bill

> 
> R.
> 
>> 
>> Thanks,
>> Bill
>> 
>>> On Jan 4, 2018, at 7:58 AM, Richard Earnshaw <richard.earns...@arm.com> 
>>> wrote:
>>> 
>>> 
>>> This patch adds generic support for the new builtin
>>> __builtin_load_no_speculate.  It provides the overloading of the
>>> different access sizes and a default fall-back expansion for targets
>>> that do not support a mechanism for inhibiting speculation.
>>> 
>>>     * builtin_types.def (BT_FN_I1_CONST_VPTR_CONST_VPTR_CONST_VPTR_VAR):
>>>     New builtin type signature.
>>>     (BT_FN_I2_CONST_VPTR_CONST_VPTR_CONST_VPTR_VAR): Likewise.
>>>     (BT_FN_I4_CONST_VPTR_CONST_VPTR_CONST_VPTR_VAR): Likewise.
>>>     (BT_FN_I8_CONST_VPTR_CONST_VPTR_CONST_VPTR_VAR): Likewise.
>>>     (BT_FN_I16_CONST_VPTR_CONST_VPTR_CONST_VPTR_VAR): Likewise.
>>>     * builtins.def (BUILT_IN_LOAD_NO_SPECULATE_N): New builtin.
>>>     (BUILT_IN_LOAD_NO_SPECULATE_1): Likewise.
>>>     (BUILT_IN_LOAD_NO_SPECULATE_2): Likewise.
>>>     (BUILT_IN_LOAD_NO_SPECULATE_4): Likewise.
>>>     (BUILT_IN_LOAD_NO_SPECULATE_8): Likewise.
>>>     (BUILT_IN_LOAD_NO_SPECULATE_16): Likewise.
>>>     * target.def (inhibit_load_speculation): New hook.
>>>     * doc/tm.texi.in (TARGET_INHIBIT_LOAD_SPECULATION): Add to
>>>     documentation.
>>>     * doc/tm.texi: Regenerated.
>>>     * doc/cpp.texi: Document __HAVE_LOAD_NO_SPECULATE.
>>>     * doc/extend.texi: Document __builtin_load_no_speculate.
>>>     * c-family/c-common.c (load_no_speculate_resolve_size): New function.
>>>     (load_no_speculate_resolve_params): New function.
>>>     (load_no_speculate_resolve_return): New function.
>>>     (resolve_overloaded_builtin): Handle overloading
>>>     __builtin_load_no_speculate.
>>>     * builtins.c (expand_load_no_speculate): New function.
>>>     (expand_builtin): Handle new no-speculation builtins.
>>>     * targhooks.h (default_inhibit_load_speculation): Declare.
>>>     * targhooks.c (default_inhibit_load_speculation): New function.
>>> ---
>>> gcc/builtin-types.def       |  16 +++++
>>> gcc/builtins.c              |  99 ++++++++++++++++++++++++++
>>> gcc/builtins.def            |  22 ++++++
>>> gcc/c-family/c-common.c     | 164 
>>> ++++++++++++++++++++++++++++++++++++++++++++
>>> gcc/c-family/c-cppbuiltin.c |   5 +-
>>> gcc/doc/cpp.texi            |   4 ++
>>> gcc/doc/extend.texi         |  53 ++++++++++++++
>>> gcc/doc/tm.texi             |   6 ++
>>> gcc/doc/tm.texi.in          |   2 +
>>> gcc/target.def              |  20 ++++++
>>> gcc/targhooks.c             |  69 +++++++++++++++++++
>>> gcc/targhooks.h             |   3 +
>>> 12 files changed, 462 insertions(+), 1 deletion(-)
>>> 
>>> <0001-builtins-Generic-support-for-__builtin_load_no_specu.patch>
>> 
> 

Reply via email to