On 08/01/18 16:01, Bill Schmidt wrote:
> 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.

You can't do that with the builtin as it is currently specified as it
also has a defined behaviour for the result it returns.  You can,
however, expand the code as normal RTL and let the optimizers remove any
redundant code if they can make that deduction and you don't need the
additional behaviour.

R.

> 
> 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