On Mon, Nov 23, 2015 at 9:45 AM, Jakub Jelinek <[email protected]> wrote:
> On Sat, Nov 21, 2015 at 07:34:02PM +0100, Tom de Vries wrote:
>> Mark by_ref mem_ref in build_receiver_ref as non-trapping
>>
>> 2015-11-21 Tom de Vries <[email protected]>
>>
>> * omp-low.c (build_receiver_ref): Mark by_ref mem_ref as non-trapping.
>
> This is ok.
Are you sure this is properly re-set by inlining via
/* We cannot propagate the TREE_THIS_NOTRAP flag if we have
remapped a parameter as the property might be valid only
for the parameter itself. */
if (TREE_THIS_NOTRAP (old)
&& (!is_parm (TREE_OPERAND (old, 0))
|| (!id->transform_parameter && is_parm (ptr))))
TREE_THIS_NOTRAP (*tp) = 1;
? Or is this never hoistable to a place where TREE_THIS_NOTRAP is not true
even after inlining? (I presume this is not directly a load via the
static chain pointer?)
>>
>> ---
>> gcc/omp-low.c | 5 ++++-
>> 1 file changed, 4 insertions(+), 1 deletion(-)
>>
>> diff --git a/gcc/omp-low.c b/gcc/omp-low.c
>> index 830db75..78f2853 100644
>> --- a/gcc/omp-low.c
>> +++ b/gcc/omp-low.c
>> @@ -1249,7 +1249,10 @@ build_receiver_ref (tree var, bool by_ref,
>> omp_context *ctx)
>> TREE_THIS_NOTRAP (x) = 1;
>> x = omp_build_component_ref (x, field);
>> if (by_ref)
>> - x = build_simple_mem_ref (x);
>> + {
>> + x = build_simple_mem_ref (x);
>> + TREE_THIS_NOTRAP (x) = 1;
>> + }
>>
>> return x;
>> }
>
>
> Jakub