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.

> Thanks,
> - Tom
> 
> 2013-11-06  Tom de Vries  <t...@codesourcery.com>
> 
>       * tree-ssa-tail-merge.c (gimple_dont_merge_p): Factor function out
>       of ...
>       (gimple_equal_p): ... here, and ...
>       (find_duplicate): ... here.  Use gimple_dont_merge_p.

Reply via email to