On Wed, Feb 1, 2012 at 10:19 PM, Patrick Marlier
<patrick.marl...@gmail.com> wrote:
> On 02/01/2012 03:59 AM, Richard Guenther wrote:
>>
>> The patch looks ok, but I'm not sure why you do not get a cgraph node
>> here - cgraph doesn't really care for builtins as far as I can see.
>>  Honza?
>
> I cannot help on this...
>
>
>> Don't you maybe want to handle builtins in a special way here?
>
> Indeed, I think my patch is wrong. __builtin_prefetch should have the
> transaction_pure attribute. I don't know how usually it should be done but
> what about adding a gcc_assert before to dereference node (potentially
> NULL)?
>
> How the attached patch looks like now?
> (Tested on i686)
>
>
>> At least those that are const/pure?
> About const/pure, we cannot consider those functions as transaction_pure
> because they can read global and shared variable.

Well, const functions cannot access global memory, they can only inspect
their arguments.

Of course __builtin_prefetch seems to be special in some way.  Note that
users can explicitely call it, so setting the attribute from the prefetching
pass isn't the correct thing to do.

Note that __builtin_prefetch has the 'no vops' attribute - I think you should
simply consider all 'no vops' builtins as transaction pure instead or
explicitely
consider a set of builtins as transaction pure (that's more scalable than
sticking the attribute onto random builtins - see how we handle builtins in
the alias machinery, we avoid sticking the fnspec attribute onto each
builtin but simply have special handling for them).

Thanks,
Richard.

> BTW, I will post a PR (and probably a patch) about this.
>
> Thanks for your comment!
>
> Patrick.
>
>        PR middle-end/52047
>        * trans-mem.c (expand_call_tm): Add an assertion.
>        * tree-ssa-loop-prefetch.c (issue_prefetch_ref): Add transaction_pure
>        attribute to __builtin_prefetch.
>        (tree_ssa_prefetch_arrays): Likewise.

Reply via email to