diff options
author | dnovillo <dnovillo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-01-30 03:11:29 +0000 |
---|---|---|
committer | dnovillo <dnovillo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-01-30 03:11:29 +0000 |
commit | cc5982dcf6461bd1486a7cf5b18b02292e5e5c3e (patch) | |
tree | 1d6083952e6c0e9f6ab31bad3dd88aa642cbc735 | |
parent | 6394ffdaaf2914e40c5782e282445cee6a2dea3d (diff) | |
download | gcc-cc5982dcf6461bd1486a7cf5b18b02292e5e5c3e.tar.gz |
PR 25874
* omp-low.c (execute_expand_omp): Move CFG cleanup code ...
(expand_omp): ... here.
(expand_omp_parallel): Only remove barriers for combined
parallel+workshare constructs.
* gcc.dg/gomp/pr25874.c: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@110393 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/omp-low.c | 27 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/gomp/pr25874.c | 15 |
4 files changed, 43 insertions, 11 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index de75a3b5c7b..42fe910837a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2006-01-29 Diego Novillo <dnovillo@redhat.com> + + PR 25874 + * omp-low.c (execute_expand_omp): Move CFG cleanup code ... + (expand_omp): ... here. + (expand_omp_parallel): Only remove barriers for combined + parallel+workshare constructs. + 2006-01-29 Eric Botcazou <ebotcazou@adacore.com> Revert diff --git a/gcc/omp-low.c b/gcc/omp-low.c index 93ceb8e2302..38d4224f4bf 100644 --- a/gcc/omp-low.c +++ b/gcc/omp-low.c @@ -2279,13 +2279,16 @@ expand_omp_parallel (struct omp_region *region) entry_bb = bb_for_stmt (region->entry); exit_bb = bb_for_stmt (region->exit); - /* Barriers at the end of the function are not necessary and can be - removed. Since the caller will have a barrier of its own, this - one is superfluous. */ - remove_exit_barrier (region); - if (is_combined_parallel (region)) - ws_args = region->ws_args; + { + ws_args = region->ws_args; + + /* For combined parallel+workshare calls, barriers at the end of + the function are not necessary and can be removed. Since the + caller will have a barrier of its own, the workshare barrier is + superfluous. */ + remove_exit_barrier (region); + } else ws_args = NULL_TREE; @@ -3244,6 +3247,13 @@ expand_omp (struct omp_region *region) gcc_unreachable (); } + /* Expansion adds and removes basic block, edges, creates + and exposes unreachable regions that need to be cleaned up + before proceeding. */ + free_dominance_info (CDI_DOMINATORS); + free_dominance_info (CDI_POST_DOMINATORS); + cleanup_tree_cfg (); + region = region->next; } } @@ -3339,12 +3349,7 @@ execute_expand_omp (void) splay_tree_delete (omp_regions); root_omp_region = NULL; omp_regions = NULL; - free_dominance_info (CDI_DOMINATORS); - free_dominance_info (CDI_POST_DOMINATORS); } - - /* Expansion adds basic blocks that may be merged. */ - cleanup_tree_cfg (); } static bool diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ecfd75caca5..5d9b87bbc28 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2006-01-29 Diego Novillo <dnovillo@redhat.com> + + * gcc.dg/gomp/pr25874.c: New test. + 2006-01-29 Dorit Nuzman <dorit@il.ibm.com> PR tree-opt/25911 diff --git a/gcc/testsuite/gcc.dg/gomp/pr25874.c b/gcc/testsuite/gcc.dg/gomp/pr25874.c new file mode 100644 index 00000000000..568e1f04f88 --- /dev/null +++ b/gcc/testsuite/gcc.dg/gomp/pr25874.c @@ -0,0 +1,15 @@ +void foo(); + +inline void bar() +{ + int i; + for ( i=0; i<1; ++i ) +#pragma omp parallel + foo(); +} + +void baz() +{ +#pragma omp parallel + bar(); +} |