Commit feca8f5a by Torvald Riegel Committed by Torvald Riegel

Prevent sharing of commit calls among transactions.

	gcc/
	* tree-ssa-tail-merge.c (gimple_equal_p): Don't treat transaction
	commits as equal.

	gcc/testsuite/
	* c-c++-common/tm/20111206.c: New test.

From-SVN: r182231
parent 033eaf85
2011-12-12 Torvald Riegel <triegel@redhat.com>
* tree-ssa-tail-merge.c (gimple_equal_p): Don't treat transaction
commits as equal.
2011-12-12 Iain Sandoe <iains@gcc.gnu.org>
* config/darwin-sections.def (zobj_const_data_section): Fix over-
2011-12-12 Torvald Riegel <triegel@redhat.com>
* c-c++-common/tm/20111206.c: New test.
2011-12-12 Richard Guenther <rguenther@suse.de>
PR lto/51262
......
/* { dg-do compile } */
/* { dg-options "-fgnu-tm -O2" } */
/* This test case triggered block sharing between the two transactions. */
void func1 (void) __attribute__ ((transaction_callable, used));
long func2 (void) __attribute__ ((transaction_callable, used));
unsigned long rand (void);
void client_run (void)
{
long types[100];
long i;
for (i = 0; i < 100; i++)
{
long action = rand ();
switch (action)
{
case 0:
{
__transaction_relaxed
{
long bill = func2 ();
if (bill >= 0)
{
func1 ();
}
}
break;
}
case 1:
{
long n;
__transaction_relaxed
{
for (n = 0; n < 100; n++)
{
long t = types[n];
switch (t)
{
case 0:
func1 ();
break;
}
}
}
break;
}
}
}
}
......@@ -1051,6 +1051,14 @@ gimple_equal_p (same_succ same_succ, gimple s1, gimple s2)
if (!gimple_call_same_target_p (s1, s2))
return false;
/* 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 (s1, BUILT_IN_TM_COMMIT))
return false;
equal = true;
for (i = 0; i < gimple_call_num_args (s1); ++i)
{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment