diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/tree-flow.h | 3 | ||||
-rw-r--r-- | gcc/tree-parloops.c | 5 | ||||
-rw-r--r-- | gcc/tree-ssa-loop-ch.c | 2 |
4 files changed, 16 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1c56ebe..7982452 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 diff --git a/gcc/tree-flow.h b/gcc/tree-flow.h index ded7a3f..f4c4d5c 100644 --- a/gcc/tree-flow.h +++ b/gcc/tree-flow.h @@ -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 diff --git a/gcc/tree-parloops.c b/gcc/tree-parloops.c index 28c450d..221f257 100644 --- a/gcc/tree-parloops.c +++ b/gcc/tree-parloops.c @@ -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 diff --git a/gcc/tree-ssa-loop-ch.c b/gcc/tree-ssa-loop-ch.c index 57e71b4..84e5a7d 100644 --- a/gcc/tree-ssa-loop-ch.c +++ b/gcc/tree-ssa-loop-ch.c @@ -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); |