On Wed, Nov 13, 2013 at 12:24 PM, Tom de Vries <tom_devr...@mentor.com> wrote:
> On 11-11-13 10:37, Richard Biener wrote:
>>
>> On Sat, 9 Nov 2013, Tom de Vries wrote:
>>
>>> Richard,
>>>
>>> This patch factors out gimple_dont_merge_p from gimple_equal_p and
>>> find_duplicate.
>>>
>>> Bootstrapped and regtested on x86_64.
>>>
>>> OK for trunk?
>>
>>
>> +static bool
>> +gimple_dont_merge_p (gimple stmt)
>> +{
>> +  switch (gimple_code (stmt))
>> +    {
>> +    case GIMPLE_CALL:
>> +      /* Eventually, we'll significantly complicate the CFG by adding
>> +        back edges to properly model the effects of transaction restart.
>> +        For the bulk of optimization this does not matter, but what we
>> +        cannot recover from is tail merging blocks between two separate
>> +        transactions.  Avoid that by making commit not match.  */
>> +      if (gimple_call_builtin_p (stmt, BUILT_IN_TM_COMMIT))
>> +       return true;
>> +
>> +      /* We cannot tail-merge the builtins that end transactions.
>> +        ??? The alternative being unsharing of BBs in the tm_init pass.
>> */
>> +      if (flag_tm
>> +         && (gimple_call_flags (stmt) & ECF_TM_BUILTIN)
>> +         && is_tm_ending_fndecl (gimple_call_fndecl (stmt)))
>> +       return true;
>>
>>
>> 1) BUILT_IN_TM_COMMIT is handled in is_tm_ending_fndecl,
>> 2) fndecl may be NULL
>>
>> I'd simply get rid of gimple_dont_merge_p and call a
>> is_tm_ending (gimple) function you'd add to TM.
>>
>
> Richard,
>
> I've update the patch according to comments, bootstrapped and reg-tested.
>
> OK for trunk?

Ok.

Thanks,
Richard.

>
> Thanks,
> - Tom
>
> 2013-11-06  Tom de Vries  <t...@codesourcery.com>
>
>         * trans-mem.c (is_tm_ending): New function.
>         * gimple.h (is_tm_ending): Declare.
>         * tree-ssa-tail-merge.c (gimple_equal_p): Remove test on
>         BUILT_IN_TM_COMMIT.
>         (find_duplicate): Use is_tm_ending instead of is_tm_ending_fndecl.
>

Reply via email to