xref: /llvm-project/flang/test/Semantics/OpenMP/device-constructs.f90 (revision 4c4a4134d5c0a0f9476b157862d378a7e571e9f0)
1*00ab44eeSKrzysztof Parzyszek! RUN: %python %S/../test_errors.py %s %flang -fopenmp -fopenmp-version=51
23323a4bdSKiran Chandramohan! Check OpenMP clause validity for the following directives:
33323a4bdSKiran Chandramohan!     2.10 Device constructs
43323a4bdSKiran Chandramohanprogram main
5cf8fc53aSagozillon   use iso_c_binding
63323a4bdSKiran Chandramohan
73323a4bdSKiran Chandramohan  real(8) :: arrayA(256), arrayB(256)
83323a4bdSKiran Chandramohan  integer :: N
9cf8fc53aSagozillon  type(c_ptr) :: cptr
103323a4bdSKiran Chandramohan
113323a4bdSKiran Chandramohan  arrayA = 1.414
123323a4bdSKiran Chandramohan  arrayB = 3.14
133323a4bdSKiran Chandramohan  N = 256
143323a4bdSKiran Chandramohan
153323a4bdSKiran Chandramohan  !$omp target map(arrayA)
163323a4bdSKiran Chandramohan  do i = 1, N
173323a4bdSKiran Chandramohan     a = 3.14
183323a4bdSKiran Chandramohan  enddo
193323a4bdSKiran Chandramohan  !$omp end target
203323a4bdSKiran Chandramohan
213323a4bdSKiran Chandramohan  !$omp target device(0)
223323a4bdSKiran Chandramohan  do i = 1, N
233323a4bdSKiran Chandramohan     a = 3.14
243323a4bdSKiran Chandramohan  enddo
253323a4bdSKiran Chandramohan  !$omp end target
263323a4bdSKiran Chandramohan
273323a4bdSKiran Chandramohan  !ERROR: At most one DEVICE clause can appear on the TARGET directive
283323a4bdSKiran Chandramohan  !$omp target device(0) device(1)
293323a4bdSKiran Chandramohan  do i = 1, N
303323a4bdSKiran Chandramohan     a = 3.14
313323a4bdSKiran Chandramohan  enddo
323323a4bdSKiran Chandramohan  !$omp end target
333323a4bdSKiran Chandramohan
343323a4bdSKiran Chandramohan  !ERROR: SCHEDULE clause is not allowed on the TARGET directive
353323a4bdSKiran Chandramohan  !$omp target schedule(static)
363323a4bdSKiran Chandramohan  do i = 1, N
373323a4bdSKiran Chandramohan     a = 3.14
383323a4bdSKiran Chandramohan  enddo
393323a4bdSKiran Chandramohan  !$omp end target
403323a4bdSKiran Chandramohan
413323a4bdSKiran Chandramohan  !$omp target defaultmap(tofrom:scalar)
423323a4bdSKiran Chandramohan  do i = 1, N
433323a4bdSKiran Chandramohan     a = 3.14
443323a4bdSKiran Chandramohan  enddo
453323a4bdSKiran Chandramohan  !$omp end target
463323a4bdSKiran Chandramohan
473323a4bdSKiran Chandramohan  !$omp target defaultmap(tofrom)
483323a4bdSKiran Chandramohan  do i = 1, N
493323a4bdSKiran Chandramohan     a = 3.14
503323a4bdSKiran Chandramohan  enddo
513323a4bdSKiran Chandramohan  !$omp end target
523323a4bdSKiran Chandramohan
533323a4bdSKiran Chandramohan  !ERROR: At most one DEFAULTMAP clause can appear on the TARGET directive
543323a4bdSKiran Chandramohan  !$omp target defaultmap(tofrom:scalar) defaultmap(tofrom:scalar)
553323a4bdSKiran Chandramohan  do i = 1, N
563323a4bdSKiran Chandramohan     a = 3.14
573323a4bdSKiran Chandramohan  enddo
583323a4bdSKiran Chandramohan  !$omp end target
593323a4bdSKiran Chandramohan
603323a4bdSKiran Chandramohan  !$omp target thread_limit(4)
613323a4bdSKiran Chandramohan  do i = 1, N
623323a4bdSKiran Chandramohan     a = 3.14
633323a4bdSKiran Chandramohan  enddo
643323a4bdSKiran Chandramohan  !$omp end target
653323a4bdSKiran Chandramohan
663323a4bdSKiran Chandramohan  !ERROR: At most one THREAD_LIMIT clause can appear on the TARGET directive
673323a4bdSKiran Chandramohan  !$omp target thread_limit(4) thread_limit(8)
683323a4bdSKiran Chandramohan  do i = 1, N
693323a4bdSKiran Chandramohan     a = 3.14
703323a4bdSKiran Chandramohan  enddo
713323a4bdSKiran Chandramohan  !$omp end target
723323a4bdSKiran Chandramohan
733323a4bdSKiran Chandramohan  !$omp teams num_teams(3) thread_limit(10) default(shared) private(i) shared(a)
743323a4bdSKiran Chandramohan  do i = 1, N
753323a4bdSKiran Chandramohan     a = 3.14
763323a4bdSKiran Chandramohan  enddo
773323a4bdSKiran Chandramohan  !$omp end teams
783323a4bdSKiran Chandramohan
793323a4bdSKiran Chandramohan  !ERROR: At most one NUM_TEAMS clause can appear on the TEAMS directive
803323a4bdSKiran Chandramohan  !$omp teams num_teams(2) num_teams(3)
813323a4bdSKiran Chandramohan  do i = 1, N
823323a4bdSKiran Chandramohan     a = 3.14
833323a4bdSKiran Chandramohan  enddo
843323a4bdSKiran Chandramohan  !$omp end teams
853323a4bdSKiran Chandramohan
863323a4bdSKiran Chandramohan  !ERROR: The parameter of the NUM_TEAMS clause must be a positive integer expression
873323a4bdSKiran Chandramohan  !$omp teams num_teams(-1)
883323a4bdSKiran Chandramohan  do i = 1, N
893323a4bdSKiran Chandramohan     a = 3.14
903323a4bdSKiran Chandramohan  enddo
913323a4bdSKiran Chandramohan  !$omp end teams
923323a4bdSKiran Chandramohan
933323a4bdSKiran Chandramohan  !ERROR: At most one THREAD_LIMIT clause can appear on the TEAMS directive
943323a4bdSKiran Chandramohan  !$omp teams thread_limit(2) thread_limit(3)
953323a4bdSKiran Chandramohan  do i = 1, N
963323a4bdSKiran Chandramohan     a = 3.14
973323a4bdSKiran Chandramohan  enddo
983323a4bdSKiran Chandramohan  !$omp end teams
993323a4bdSKiran Chandramohan
1003323a4bdSKiran Chandramohan  !ERROR: The parameter of the THREAD_LIMIT clause must be a positive integer expression
1013323a4bdSKiran Chandramohan  !$omp teams thread_limit(-1)
1023323a4bdSKiran Chandramohan  do i = 1, N
1033323a4bdSKiran Chandramohan     a = 3.14
1043323a4bdSKiran Chandramohan  enddo
1053323a4bdSKiran Chandramohan  !$omp end teams
1063323a4bdSKiran Chandramohan
1073323a4bdSKiran Chandramohan  !ERROR: At most one DEFAULT clause can appear on the TEAMS directive
1083323a4bdSKiran Chandramohan  !$omp teams default(shared) default(private)
1093323a4bdSKiran Chandramohan  do i = 1, N
1103323a4bdSKiran Chandramohan     a = 3.14
1113323a4bdSKiran Chandramohan  enddo
1123323a4bdSKiran Chandramohan  !$omp end teams
1133323a4bdSKiran Chandramohan
1143323a4bdSKiran Chandramohan  !$omp target teams num_teams(2) defaultmap(tofrom:scalar)
1153323a4bdSKiran Chandramohan  do i = 1, N
1163323a4bdSKiran Chandramohan      a = 3.14
1173323a4bdSKiran Chandramohan  enddo
1183323a4bdSKiran Chandramohan  !$omp end target teams
1193323a4bdSKiran Chandramohan
1203323a4bdSKiran Chandramohan  !$omp target map(tofrom:a)
1213323a4bdSKiran Chandramohan  do i = 1, N
1223323a4bdSKiran Chandramohan     a = 3.14
1233323a4bdSKiran Chandramohan  enddo
1243323a4bdSKiran Chandramohan  !$omp end target
1253323a4bdSKiran Chandramohan
1263323a4bdSKiran Chandramohan  !ERROR: Only the TO, FROM, TOFROM, ALLOC map types are permitted for MAP clauses on the TARGET directive
1273323a4bdSKiran Chandramohan  !$omp target map(delete:a)
1283323a4bdSKiran Chandramohan  do i = 1, N
1293323a4bdSKiran Chandramohan     a = 3.14
1303323a4bdSKiran Chandramohan  enddo
1313323a4bdSKiran Chandramohan  !$omp end target
1323323a4bdSKiran Chandramohan
1333323a4bdSKiran Chandramohan  !$omp target data device(0) map(to:a)
1343323a4bdSKiran Chandramohan  do i = 1, N
1353323a4bdSKiran Chandramohan    a = 3.14
1363323a4bdSKiran Chandramohan  enddo
1373323a4bdSKiran Chandramohan  !$omp end target data
1383323a4bdSKiran Chandramohan
139cf8fc53aSagozillon  !$omp target data device(0) use_device_addr(cptr)
140cf8fc53aSagozillon   cptr = c_null_ptr
141cf8fc53aSagozillon  !$omp end target data
142cf8fc53aSagozillon
143cf8fc53aSagozillon  !$omp target data device(0) use_device_addr(cptr)
144cf8fc53aSagozillon   cptr = c_null_ptr
145cf8fc53aSagozillon  !$omp end target data
146cf8fc53aSagozillon
147cf8fc53aSagozillon  !ERROR: At least one of MAP, USE_DEVICE_ADDR, USE_DEVICE_PTR clause must appear on the TARGET DATA directive
1483323a4bdSKiran Chandramohan  !$omp target data device(0)
1493323a4bdSKiran Chandramohan  do i = 1, N
1503323a4bdSKiran Chandramohan     a = 3.14
1513323a4bdSKiran Chandramohan  enddo
1523323a4bdSKiran Chandramohan  !$omp end target data
1533323a4bdSKiran Chandramohan
1543323a4bdSKiran Chandramohan  !ERROR: The device expression of the DEVICE clause must be a positive integer expression
1553323a4bdSKiran Chandramohan  !$omp target enter data map(alloc:A) device(-2)
1563323a4bdSKiran Chandramohan
1573323a4bdSKiran Chandramohan  !ERROR: The device expression of the DEVICE clause must be a positive integer expression
1583323a4bdSKiran Chandramohan  !$omp target exit data map(delete:A) device(-2)
1593323a4bdSKiran Chandramohan
1603323a4bdSKiran Chandramohan  !ERROR: At most one IF clause can appear on the TARGET ENTER DATA directive
1613323a4bdSKiran Chandramohan  !$omp target enter data map(to:a) if(.true.) if(.false.)
1623323a4bdSKiran Chandramohan
1633323a4bdSKiran Chandramohan  !ERROR: Only the TO, ALLOC map types are permitted for MAP clauses on the TARGET ENTER DATA directive
1643323a4bdSKiran Chandramohan  !$omp target enter data map(from:a)
1653323a4bdSKiran Chandramohan
1663323a4bdSKiran Chandramohan  !$omp target exit data map(delete:a)
1673323a4bdSKiran Chandramohan
1683323a4bdSKiran Chandramohan  !ERROR: At most one DEVICE clause can appear on the TARGET EXIT DATA directive
1693323a4bdSKiran Chandramohan  !$omp target exit data map(from:a) device(0) device(1)
1703323a4bdSKiran Chandramohan
1713323a4bdSKiran Chandramohan  !ERROR: Only the FROM, RELEASE, DELETE map types are permitted for MAP clauses on the TARGET EXIT DATA directive
1723323a4bdSKiran Chandramohan  !$omp target exit data map(to:a)
1733323a4bdSKiran Chandramohan
1743323a4bdSKiran Chandramohan  !$omp target update if(.true.) device(1) to(a) from(b) depend(inout:c) nowait
1753323a4bdSKiran Chandramohan
1763323a4bdSKiran Chandramohan  !ERROR: At most one IF clause can appear on the TARGET UPDATE directive
1773323a4bdSKiran Chandramohan  !$omp target update to(a) if(.true.) if(.false.)
1783323a4bdSKiran Chandramohan
1793323a4bdSKiran Chandramohan  !ERROR: At most one DEVICE clause can appear on the TARGET UPDATE directive
1803323a4bdSKiran Chandramohan  !$omp target update device(0) device(1) from(b)
1813323a4bdSKiran Chandramohan
1823323a4bdSKiran Chandramohan  !$omp target
1833323a4bdSKiran Chandramohan  !ERROR: `DISTRIBUTE` region has to be strictly nested inside `TEAMS` region.
1843323a4bdSKiran Chandramohan  !$omp distribute
1853323a4bdSKiran Chandramohan  do i = 1, N
1863323a4bdSKiran Chandramohan     a = 3.14
1873323a4bdSKiran Chandramohan  enddo
1883323a4bdSKiran Chandramohan  !$omp end distribute
1893323a4bdSKiran Chandramohan  !$omp end target
1903323a4bdSKiran Chandramohan
1913323a4bdSKiran Chandramohan  !$omp target
1923323a4bdSKiran Chandramohan  !$omp teams
1933323a4bdSKiran Chandramohan  !$omp distribute
1943323a4bdSKiran Chandramohan  do i = 1, N
1953323a4bdSKiran Chandramohan     a = 3.14
1963323a4bdSKiran Chandramohan  enddo
1973323a4bdSKiran Chandramohan  !$omp end distribute
1983323a4bdSKiran Chandramohan  !$omp end teams
1993323a4bdSKiran Chandramohan  !$omp end target
2003323a4bdSKiran Chandramohan
2013323a4bdSKiran Chandramohan  !$omp target
2023323a4bdSKiran Chandramohan  !ERROR: `DISTRIBUTE` region has to be strictly nested inside `TEAMS` region.
2033323a4bdSKiran Chandramohan  !ERROR: At most one COLLAPSE clause can appear on the DISTRIBUTE directive
2043323a4bdSKiran Chandramohan  !$omp distribute collapse(2) collapse(3)
2053323a4bdSKiran Chandramohan  do i = 1, N
2063323a4bdSKiran Chandramohan     do j = 1, N
2073323a4bdSKiran Chandramohan        do k = 1, N
2083323a4bdSKiran Chandramohan           a = 3.14
2093323a4bdSKiran Chandramohan        enddo
2103323a4bdSKiran Chandramohan     enddo
2113323a4bdSKiran Chandramohan  enddo
2123323a4bdSKiran Chandramohan  !$omp end distribute
2133323a4bdSKiran Chandramohan  !$omp end target
2143323a4bdSKiran Chandramohan
2153323a4bdSKiran Chandramohan  !$omp target
2163323a4bdSKiran Chandramohan  !$omp teams
2173323a4bdSKiran Chandramohan  !ERROR: At most one COLLAPSE clause can appear on the DISTRIBUTE directive
2183323a4bdSKiran Chandramohan  !$omp distribute collapse(2) collapse(3)
2193323a4bdSKiran Chandramohan  do i = 1, N
2203323a4bdSKiran Chandramohan     do j = 1, N
2213323a4bdSKiran Chandramohan        do k = 1, N
2223323a4bdSKiran Chandramohan           a = 3.14
2233323a4bdSKiran Chandramohan        enddo
2243323a4bdSKiran Chandramohan     enddo
2253323a4bdSKiran Chandramohan  enddo
2263323a4bdSKiran Chandramohan  !$omp end distribute
2273323a4bdSKiran Chandramohan  !$omp end teams
2283323a4bdSKiran Chandramohan  !$omp end target
2293323a4bdSKiran Chandramohan
2303323a4bdSKiran Chandramohan  !$omp target
2313323a4bdSKiran Chandramohan  !ERROR: `DISTRIBUTE` region has to be strictly nested inside `TEAMS` region.
2323323a4bdSKiran Chandramohan  !$omp distribute dist_schedule(static, 2)
2333323a4bdSKiran Chandramohan  do i = 1, N
2343323a4bdSKiran Chandramohan     a = 3.14
2353323a4bdSKiran Chandramohan  enddo
2363323a4bdSKiran Chandramohan  !$omp end distribute
2373323a4bdSKiran Chandramohan  !$omp end target
2383323a4bdSKiran Chandramohan
2393323a4bdSKiran Chandramohan  !$omp target
2403323a4bdSKiran Chandramohan  !$omp teams
2413323a4bdSKiran Chandramohan  !$omp distribute dist_schedule(static, 2)
2423323a4bdSKiran Chandramohan  do i = 1, N
2433323a4bdSKiran Chandramohan     a = 3.14
2443323a4bdSKiran Chandramohan  enddo
2453323a4bdSKiran Chandramohan  !$omp end distribute
2463323a4bdSKiran Chandramohan  !$omp end teams
2473323a4bdSKiran Chandramohan  !$omp end target
2483323a4bdSKiran Chandramohan
2493323a4bdSKiran Chandramohan  !$omp target
2503323a4bdSKiran Chandramohan  !ERROR: `DISTRIBUTE` region has to be strictly nested inside `TEAMS` region.
2513323a4bdSKiran Chandramohan  !ERROR: At most one DIST_SCHEDULE clause can appear on the DISTRIBUTE directive
2523323a4bdSKiran Chandramohan  !$omp distribute dist_schedule(static, 2) dist_schedule(static, 3)
2533323a4bdSKiran Chandramohan  do i = 1, N
2543323a4bdSKiran Chandramohan     a = 3.14
2553323a4bdSKiran Chandramohan  enddo
2563323a4bdSKiran Chandramohan  !$omp end distribute
2573323a4bdSKiran Chandramohan  !$omp end target
2583323a4bdSKiran Chandramohan
2593323a4bdSKiran Chandramohan  !$omp target
2603323a4bdSKiran Chandramohan  !$omp teams
2613323a4bdSKiran Chandramohan  !ERROR: At most one DIST_SCHEDULE clause can appear on the DISTRIBUTE directive
2623323a4bdSKiran Chandramohan  !$omp distribute dist_schedule(static, 2) dist_schedule(static, 3)
2633323a4bdSKiran Chandramohan  do i = 1, N
2643323a4bdSKiran Chandramohan     a = 3.14
2653323a4bdSKiran Chandramohan  enddo
2663323a4bdSKiran Chandramohan  !$omp end distribute
2673323a4bdSKiran Chandramohan  !$omp end teams
2683323a4bdSKiran Chandramohan  !$omp end target
2693323a4bdSKiran Chandramohan
2703323a4bdSKiran Chandramohanend program main
271