]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
OpenMP: Update invoke.texi and fix fortran/parse.cc for -fopenmp-simd
authorTobias Burnus <tobias@codesourcery.com>
Wed, 5 Oct 2022 13:39:03 +0000 (15:39 +0200)
committerTobias Burnus <tobias@codesourcery.com>
Wed, 5 Oct 2022 13:39:03 +0000 (15:39 +0200)
Split off from the 'Fortran: Add OpenMP's assume(s) directives' patch.

gcc/
* doc/invoke.texi (-fopenmp): Mention C++ attribut syntax.
(-fopenmp-simd): Likewise; update permitted directives.

gcc/fortran/
* parse.cc (decode_omp_directive): Handle '(end) loop' and 'scan'
also with -fopenmp-simd.

gcc/testsuite/
* gfortran.dg/gomp/openmp-simd-7.f90: New test.

(cherry picked from commit 8792047470073df0da4a5b91997d6058193d7676)

gcc/ChangeLog.omp
gcc/doc/invoke.texi
gcc/fortran/ChangeLog.omp
gcc/fortran/parse.cc
gcc/testsuite/ChangeLog.omp
gcc/testsuite/gfortran.dg/gomp/openmp-simd-7.f90 [new file with mode: 0644]

index 72151ab2673665e7f17e8364097d76f9beb5a6d7..52bc562d95ecec48a398f88e3ab19f7a2d23d258 100644 (file)
@@ -1,3 +1,11 @@
+2022-10-05  Tobias Burnus  <tobias@codesourcery.com>
+
+       Backport from mainline:
+       2022-10-04  Tobias Burnus  <tobias@codesourcery.com>
+
+       * doc/invoke.texi (-fopenmp): Mention C++ attribut syntax.
+       (-fopenmp-simd): Likewise; update permitted directives.
+
 2022-10-05  Tobias Burnus  <tobias@codesourcery.com>
 
        Backport from mainline:
index 52ba1c84bec3511bd8dbe47df1e48f195afe85dc..8bd727900560ebbfe9310d44fbd02b79de149b28 100644 (file)
@@ -2746,7 +2746,8 @@ permitted.
 @item -fopenmp
 @opindex fopenmp
 @cindex OpenMP parallel
-Enable handling of OpenMP directives @code{#pragma omp} in C/C++ and
+Enable handling of OpenMP directives @code{#pragma omp} in C/C++,
+@code{[[omp::directive(...)]]} and @code{[[omp::sequence(...)]]} in C++ and
 @code{!$omp} in Fortran.  When @option{-fopenmp} is specified, the
 compiler generates parallel code according to the OpenMP Application
 Program Interface v4.5 @w{@uref{https://www.openmp.org}}.  This option
@@ -2758,9 +2759,12 @@ have support for @option{-pthread}. @option{-fopenmp} implies
 @opindex fopenmp-simd
 @cindex OpenMP SIMD
 @cindex SIMD
-Enable handling of OpenMP's SIMD directives with @code{#pragma omp}
-in C/C++ and @code{!$omp} in Fortran. Other OpenMP directives
-are ignored.
+Enable handling of OpenMP's @code{simd}, @code{declare simd},
+@code{declare reduction}, @code{assume}, @code{ordered}, @code{scan},
+@code{loop} directives and combined or composite directives with
+@code{simd} as constituent with @code{#pragma omp} in C/C++,
+@code{[[omp::directive(...)]]} and @code{[[omp::sequence(...)]]} in C++
+and @code{!$omp} in Fortran.  Other OpenMP directives are ignored.
 
 @item -fopenmp-target-simd-clone
 @opindex fopenmp-target-simd-clone
index 5d056d031c5a9f06ef662bdcbb36f73d62006ccd..e1f67c8c0c3924320c91643ddad8e3783be2153c 100644 (file)
@@ -1,3 +1,11 @@
+2022-10-05  Tobias Burnus  <tobias@codesourcery.com>
+
+       Backport from mainline:
+       2022-10-04  Tobias Burnus  <tobias@codesourcery.com>
+
+       * parse.cc (decode_omp_directive): Handle '(end) loop' and 'scan'
+       also with -fopenmp-simd.
+
 2022-09-30  Tobias Burnus  <tobias@codesourcery.com>
 
        Backport from mainline:
index fc88111a7adfb4ee5323ba2d1bcdeb25056f0bf1..28d9cccdd2584876e45331e7b29ef6900d237f86 100644 (file)
@@ -931,7 +931,7 @@ decode_omp_directive (void)
       matcho ("end distribute", gfc_match_omp_eos_error, ST_OMP_END_DISTRIBUTE);
       matchs ("end do simd", gfc_match_omp_end_nowait, ST_OMP_END_DO_SIMD);
       matcho ("end do", gfc_match_omp_end_nowait, ST_OMP_END_DO);
-      matcho ("end loop", gfc_match_omp_eos_error, ST_OMP_END_LOOP);
+      matchs ("end loop", gfc_match_omp_eos_error, ST_OMP_END_LOOP);
       matchs ("end simd", gfc_match_omp_eos_error, ST_OMP_END_SIMD);
       matcho ("end masked taskloop simd", gfc_match_omp_eos_error,
              ST_OMP_END_MASKED_TASKLOOP_SIMD);
@@ -1034,7 +1034,7 @@ decode_omp_directive (void)
       matcho ("nothing", gfc_match_omp_nothing, ST_NONE);
       break;
     case 'l':
-      matcho ("loop", gfc_match_omp_loop, ST_OMP_LOOP);
+      matchs ("loop", gfc_match_omp_loop, ST_OMP_LOOP);
       break;
     case 'o':
       if (gfc_match ("ordered depend (") == MATCH_YES
@@ -1081,7 +1081,7 @@ decode_omp_directive (void)
       matcho ("requires", gfc_match_omp_requires, ST_OMP_REQUIRES);
       break;
     case 's':
-      matcho ("scan", gfc_match_omp_scan, ST_OMP_SCAN);
+      matchs ("scan", gfc_match_omp_scan, ST_OMP_SCAN);
       matcho ("scope", gfc_match_omp_scope, ST_OMP_SCOPE);
       matcho ("sections", gfc_match_omp_sections, ST_OMP_SECTIONS);
       matcho ("section", gfc_match_omp_eos_error, ST_OMP_SECTION);
index 9dc42e628229d3821018aecbe8e33125f8eb8d27..b26b68f3e3e57f923672e7562677ae3dea3ff5c9 100644 (file)
@@ -1,3 +1,10 @@
+2022-10-05  Tobias Burnus  <tobias@codesourcery.com>
+
+       Backport from mainline:
+       2022-10-04  Tobias Burnus  <tobias@codesourcery.com>
+
+       * gfortran.dg/gomp/openmp-simd-7.f90: New test.
+
 2022-10-04  Tobias Burnus  <tobias@codesourcery.com>
 
        Backport from mainline:
diff --git a/gcc/testsuite/gfortran.dg/gomp/openmp-simd-7.f90 b/gcc/testsuite/gfortran.dg/gomp/openmp-simd-7.f90
new file mode 100644 (file)
index 0000000..d7010bb
--- /dev/null
@@ -0,0 +1,23 @@
+! { dg-options "-fno-openmp -fopenmp-simd -fdump-tree-original" }
+
+subroutine foo (a, b)
+  integer, contiguous :: a(:), b(:)
+  integer :: i
+  !$omp simd reduction (inscan, +:r)
+  do i = 1, 1024
+    r = r + a(i)
+    !$omp scan inclusive(r)
+    b(i) = r
+  end do
+  !$omp end simd
+
+  !$omp loop
+  do i = 1, 1024
+    a(i) = a(i) + i
+  end do
+  !$omp end loop
+end
+
+! { dg-final { scan-tree-dump "#pragma omp simd linear\\(i:1\\) reduction\\(inscan,\\+:r\\)" "original" } }
+! { dg-final { scan-tree-dump "#pragma omp scan inclusive\\(r\\)" "original" } }
+! { dg-final { scan-tree-dump "#pragma omp loop" "original" } }