Commit 8f80d734 by Jeff Law Committed by Jeff Law

re PR tree-optimization/83410 (libgomp.graphite/force-parallel-4.c etc. FAIL)

	PR tree-optimization/83410
	* tree-ssa-threadupdate.c (thread_block_1): Avoid certain jump
	threads when parallelizing loops.

From-SVN: r255700
parent 4849deb1
2017-12-12 Jeff Law <law@redhat.com>
PR tree-optimization/83410
* tree-ssa-threadupdate.c (thread_block_1): Avoid certain jump
threads when parallelizing loops.
2017-12-15 Jakub Jelinek <jakub@redhat.com> 2017-12-15 Jakub Jelinek <jakub@redhat.com>
* tree-core.h (struct attribute_spec): Swap affects_type_identity and * tree-core.h (struct attribute_spec): Swap affects_type_identity and
...@@ -1333,6 +1333,31 @@ thread_block_1 (basic_block bb, bool noloop_only, bool joiners) ...@@ -1333,6 +1333,31 @@ thread_block_1 (basic_block bb, bool noloop_only, bool joiners)
if (i != path->length ()) if (i != path->length ())
continue; continue;
/* Loop parallelization can be confused by the result of
threading through the loop exit test back into the loop.
However, theading those jumps seems to help other codes.
I have been unable to find anything related to the shape of
the CFG, the contents of the affected blocks, etc which would
allow a more sensible test than what we're using below which
merely avoids the optimization when parallelizing loops. */
if (flag_tree_parallelize_loops > 1)
{
for (i = 1; i < path->length (); i++)
if (bb->loop_father == e2->src->loop_father
&& loop_exits_from_bb_p (bb->loop_father,
(*path)[i]->e->src)
&& !loop_exit_edge_p (bb->loop_father, e2))
break;
if (i != path->length ())
{
delete_jump_thread_path (path);
e->aux = NULL;
continue;
}
}
} }
/* Insert the outgoing edge into the hash table if it is not /* Insert the outgoing edge into the hash table if it is not
......
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