public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r12-3779] openmp: Fix OpenMP expansion of scope with non-fallthrugh body [PR102415]
@ 2021-09-22  7:36 Jakub Jelinek
  0 siblings, 0 replies; only message in thread
From: Jakub Jelinek @ 2021-09-22  7:36 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:c4432b2776aeeffee9125bf87ff937e4a8907bbd

commit r12-3779-gc4432b2776aeeffee9125bf87ff937e4a8907bbd
Author: Jakub Jelinek <jakub@redhat.com>
Date:   Wed Sep 22 09:32:32 2021 +0200

    openmp: Fix OpenMP expansion of scope with non-fallthrugh body [PR102415]
    
    I've used function for omp single expansion also for omp scope.  That is
    mostly ok, but as the testcase shows, there is one important difference.
    The omp single expansion always has a fallthru body, because it during
    omp lowering expands the body as if wrapped in an if to simulate that
    one thread runs the body and others wait (unless nowait) until it completes
    and continue.  omp scope is invoked by all threads and so if the body
    is non-fallthru, the barrier (unless nowait) at the end will not be reached
    by any of the threads.
    
    The following patch fixes that by handling the case where cfg pass optimizes
    away the exit bb of it gracefully.
    
    2021-09-22  Jakub Jelinek  <jakub@redhat.com>
    
            PR middle-end/102415
            * omp-expand.c (expand_omp_single): If region->exit is NULL,
            assert region->entry is GIMPLE_OMP_SCOPE region and return.
    
            * c-c++-common/gomp/scope-3.c: New test.

Diff:
---
 gcc/omp-expand.c                          | 10 ++++++++--
 gcc/testsuite/c-c++-common/gomp/scope-3.c | 21 +++++++++++++++++++++
 2 files changed, 29 insertions(+), 2 deletions(-)

diff --git a/gcc/omp-expand.c b/gcc/omp-expand.c
index 159ae0e1647..496c0e6cdd6 100644
--- a/gcc/omp-expand.c
+++ b/gcc/omp-expand.c
@@ -8433,11 +8433,17 @@ expand_omp_single (struct omp_region *region)
   exit_bb = region->exit;
 
   si = gsi_last_nondebug_bb (entry_bb);
-  gcc_assert (gimple_code (gsi_stmt (si)) == GIMPLE_OMP_SINGLE
-	      || gimple_code (gsi_stmt (si)) == GIMPLE_OMP_SCOPE);
+  enum gimple_code code = gimple_code (gsi_stmt (si));
+  gcc_assert (code == GIMPLE_OMP_SINGLE || code == GIMPLE_OMP_SCOPE);
   gsi_remove (&si, true);
   single_succ_edge (entry_bb)->flags = EDGE_FALLTHRU;
 
+  if (exit_bb == NULL)
+    {
+      gcc_assert (code == GIMPLE_OMP_SCOPE);
+      return;
+    }
+
   si = gsi_last_nondebug_bb (exit_bb);
   if (!gimple_omp_return_nowait_p (gsi_stmt (si)))
     {
diff --git a/gcc/testsuite/c-c++-common/gomp/scope-3.c b/gcc/testsuite/c-c++-common/gomp/scope-3.c
new file mode 100644
index 00000000000..78bb1a3ccb9
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/gomp/scope-3.c
@@ -0,0 +1,21 @@
+/* PR middle-end/102415 */
+
+extern
+#ifdef __cplusplus
+"C"
+#endif
+void abort ();
+
+void
+foo (void)
+{
+  #pragma omp scope nowait
+  abort ();
+}
+
+void
+bar (void)
+{
+  #pragma omp scope
+  abort ();
+}


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-09-22  7:36 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-22  7:36 [gcc r12-3779] openmp: Fix OpenMP expansion of scope with non-fallthrugh body [PR102415] Jakub Jelinek

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).