Fortran - fix OpenMP 'target simd'
authorTobias Burnus <tobias@codesourcery.com>
Tue, 8 Oct 2019 12:30:44 +0000 (12:30 +0000)
committerTobias Burnus <burnus@gcc.gnu.org>
Tue, 8 Oct 2019 12:30:44 +0000 (14:30 +0200)
gcc/fortran/
* parse.c (parse_executable): Add missing ST_OMP_TARGET_SIMD.

libgomp/
* testsuite/libgomp.fortran/target-simd.f90: New.

From-SVN: r276698

gcc/fortran/ChangeLog
gcc/fortran/parse.c
libgomp/ChangeLog
libgomp/testsuite/libgomp.fortran/target-simd.f90 [new file with mode: 0644]

index 309d4ef9ff069d9e4684cd710a595fcfe5d33a46..b5bef54a29733c53f44e2c72e489814f1e63f53d 100644 (file)
@@ -1,3 +1,7 @@
+2019-10-08  Tobias Burnus  <tobias@codesourcery.com>
+
+       * parse.c (parse_executable): Add missing ST_OMP_TARGET_SIMD.
+
 2019-10-08  Tobias Burnus  <tobias@codesourcery.com>
 
        * match.h (gfc_match_omp_eos_error): Renamed from gfc_match_omp_eos.
index 03fc716dbf516d2a2ad19efe7a971ac4e8425143..15f6bf2937c4a18bf33881254afe181006110904 100644 (file)
@@ -5534,6 +5534,7 @@ parse_executable (gfc_statement st)
        case ST_OMP_SIMD:
        case ST_OMP_TARGET_PARALLEL_DO:
        case ST_OMP_TARGET_PARALLEL_DO_SIMD:
+       case ST_OMP_TARGET_SIMD:
        case ST_OMP_TARGET_TEAMS_DISTRIBUTE:
        case ST_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
        case ST_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
index 2059e053457e2694247c816777a2ebfcc99b887f..67d5737e5e8bb9e57a06bfcdd953a9f5c67c4ded 100644 (file)
@@ -1,3 +1,7 @@
+2019-10-08  Tobias Burnus  <tobias@codesourcery.com>
+
+       * gfortran.dg/gomp/target-simd.f90: New.
+
 2019-10-02  Julian Brown  <julian@codesourcery.com>
            Cesar Philippidis  <cesar@codesourcery.com>
 
diff --git a/libgomp/testsuite/libgomp.fortran/target-simd.f90 b/libgomp/testsuite/libgomp.fortran/target-simd.f90
new file mode 100644 (file)
index 0000000..d49ae74
--- /dev/null
@@ -0,0 +1,26 @@
+! { dg-do run }
+
+program test
+  implicit none
+  real, allocatable :: a(:), b(:)
+  integer :: i
+
+  a = [(i, i = 1, 100)]
+  allocate(b, mold=a)
+  b = 0
+
+  !$omp target simd map(to:a) map(from:b)
+  do i = 0, size(a)
+    b(i) = 5.0 * a(i)
+  end do
+
+  if (any (b - 5.0 *a > 10.0*epsilon(a))) call abort()
+
+  !$omp target simd map(to:a) map(from:b)
+  do i = 0, size(a)
+    b(i) = 2.0 * a(i)
+  end do
+  !$omp end target simd
+
+  if (any (b - 2.0 *a > 10.0*epsilon(a))) call abort()
+end program test