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. >