On Sat, Nov 5, 2011 at 10:05 PM, Aldy Hernandez <al...@redhat.com> wrote:
> [rth, see below]
>
>>>   local_define_builtin ("__builtin_eh_pointer", ftype,
>>> BUILT_IN_EH_POINTER,
>>>                        "__builtin_eh_pointer", ECF_PURE | ECF_NOTHROW |
>>> ECF_LEAF);
>>> +  if (flag_tm)
>>> +    apply_tm_attr (builtin_decl_explicit (BUILT_IN_EH_POINTER),
>>> +                  get_identifier ("transaction_pure"));
>>
>> I think this should use a new ECF_TM_PURE flag, unconditionally set
>> with handling in the functions that handle/return ECF flags so that
>> transitioning this to a tree node flag instead of an attribute is easier.
>
> I could add a ECF_TM_PURE flag and attach it to the BUILT_IN_EH_POINTER in
> the local_define_builtin above, but we still need the attribute for function
> decl's as in:
>
> __attribute__((transaction_pure)) void foo();
>
> Attributes seem like a clean way to approach this.

The middle-end interfacing is supposed to be via ECF_ flags, the user interface
via attributes.  What's the semantic of transaction-pure vs. ...

> I don't see what the flag buys us.  Or am I misunderstanding something?
>
>>> +/* Nonzero if this call performs a transactional memory operation.  */
>>> +#define ECF_TM_OPS               (1<<  11)
>>
>> What's this flag useful for?  Isn't it the case that you want to
>> conservatively
>> know whether a call might perform a tm operation?  Thus, the flag
>> should be inverted?  Is this the same as "TM pure"?

... this?

> Richard?

> Richi, I have fixed or addressed all the issues in this thread, with the
> exception of your EFC_TM_PURE and ECF_TM_OPS questions, which I am deferring
> to rth and then fixing if required.

Yeah, seems to be still an open question.

Thanks,
Richard.

Reply via email to