summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordnovillo <dnovillo@138bc75d-0d04-0410-961f-82ee72b054a4>2006-01-30 03:11:29 +0000
committerdnovillo <dnovillo@138bc75d-0d04-0410-961f-82ee72b054a4>2006-01-30 03:11:29 +0000
commitcc5982dcf6461bd1486a7cf5b18b02292e5e5c3e (patch)
tree1d6083952e6c0e9f6ab31bad3dd88aa642cbc735
parent6394ffdaaf2914e40c5782e282445cee6a2dea3d (diff)
downloadgcc-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/ChangeLog8
-rw-r--r--gcc/omp-low.c27
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/gomp/pr25874.c15
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();
+}