re PR tree-optimization/46886 (wrong code with -ftree-parallelize-loops -fno-tree-ch)

2012-03-08  Richard Guenther  <rguenther@suse.de>

	PR tree-optimization/46886
	* tree-flow.h (do_while_loop_p): Declare.
	* tree-ssa-loop-ch.c (do_while_loop_p): Export.
	* tree-parloops.c (parallelize_loops): Only parallelize do-while
	loops.

	* testsuite/libgomp.c/pr46886.c: New testcase.

From-SVN: r184010
This commit is contained in:
Richard Guenther 2012-02-08 15:28:01 +00:00 committed by Richard Biener
parent c51ec0a3d6
commit 31432e219f
6 changed files with 49 additions and 2 deletions

View File

@ -1,3 +1,11 @@
2012-02-08 Richard Guenther <rguenther@suse.de>
PR tree-optimization/46886
* tree-flow.h (do_while_loop_p): Declare.
* tree-ssa-loop-ch.c (do_while_loop_p): Export.
* tree-parloops.c (parallelize_loops): Only parallelize do-while
loops.
2012-02-08 Andrew MacLeod <amacleod@redhat.com>
* optabs.c (expand_atomic_load): Do not assume compare_and_swap will

View File

@ -619,6 +619,9 @@ extern bool may_propagate_copy (tree, tree);
extern bool may_propagate_copy_into_stmt (gimple, tree);
extern bool may_propagate_copy_into_asm (tree);
/* In tree-ssa-loop-ch.c */
bool do_while_loop_p (struct loop *);
/* Affine iv. */
typedef struct

View File

@ -2183,7 +2183,10 @@ parallelize_loops (void)
|| loop_has_blocks_with_irreducible_flag (loop)
|| (loop_preheader_edge (loop)->src->flags & BB_IRREDUCIBLE_LOOP)
/* FIXME: the check for vector phi nodes could be removed. */
|| loop_has_vector_phi_nodes (loop))
|| loop_has_vector_phi_nodes (loop)
/* FIXME: transform_to_exit_first_loop does not handle not
header-copied loops correctly - see PR46886. */
|| !do_while_loop_p (loop))
continue;
estimated = max_stmt_executions_int (loop, false);
/* FIXME: Bypass this check as graphite doesn't update the

View File

@ -104,7 +104,7 @@ should_duplicate_loop_header_p (basic_block header, struct loop *loop,
/* Checks whether LOOP is a do-while style loop. */
static bool
bool
do_while_loop_p (struct loop *loop)
{
gimple stmt = last_stmt (loop->latch);

View File

@ -1,3 +1,8 @@
2012-02-08 Richard Guenther <rguenther@suse.de>
PR tree-optimization/46886
* testsuite/libgomp.c/pr46886.c: New testcase.
2012-01-25 Matthias Klose <doko@ubuntu.com>
* config/linux/arm: Remove empty directory.

View File

@ -0,0 +1,28 @@
/* { dg-do run } */
/* { dg-options "-O -ftree-parallelize-loops=4 -fno-tree-ch -fno-tree-dominator-opts" } */
void abort(void);
int d[1024], e[1024];
int foo (void)
{
int s = 0;
int i;
for (i = 0; i < 1024; i++)
s += d[i] - e[i];
return s;
}
int main ()
{
int i;
for (i = 0; i < 1024; i++)
{
d[i] = i * 2;
e[i] = i;
}
if (foo () != 1023 * 1024 / 2)
abort ();
return 0;
}