1fb5fd2d8SMichael Klemm! REQUIRES: openmp_runtime 2fb5fd2d8SMichael Klemm 3612f8ec7SShashwathiNavada! RUN: %python %S/../test_errors.py %s %flang_fc1 %openmp_flags %openmp_module_flag -fopenmp-version=51 43323a4bdSKiran Chandramohanuse omp_lib 53323a4bdSKiran Chandramohan! Check OpenMP clause validity for the following directives: 63323a4bdSKiran Chandramohan! 73323a4bdSKiran Chandramohan! 2.5 PARALLEL construct 83323a4bdSKiran Chandramohan! 2.7.1 Loop construct 93323a4bdSKiran Chandramohan! ... 103323a4bdSKiran Chandramohan 11f36a2547SRaghu Maddhipatla use iso_c_binding 123323a4bdSKiran Chandramohan integer :: b = 128 13f36a2547SRaghu Maddhipatla integer, allocatable :: allc 14f36a2547SRaghu Maddhipatla type(C_PTR) :: cpt 153323a4bdSKiran Chandramohan integer :: z, c = 32 163323a4bdSKiran Chandramohan integer, parameter :: num = 16 173323a4bdSKiran Chandramohan real(8) :: arrayA(256), arrayB(512) 183323a4bdSKiran Chandramohan 193323a4bdSKiran Chandramohan integer(omp_memspace_handle_kind) :: xy_memspace = omp_default_mem_space 203323a4bdSKiran Chandramohan type(omp_alloctrait) :: xy_traits(1) = [omp_alloctrait(omp_atk_alignment,64)] 213323a4bdSKiran Chandramohan integer(omp_allocator_handle_kind) :: xy_alloc 223323a4bdSKiran Chandramohan xy_alloc = omp_init_allocator(xy_memspace, 1, xy_traits) 233323a4bdSKiran Chandramohan 243323a4bdSKiran Chandramohan arrayA = 1.414 253323a4bdSKiran Chandramohan arrayB = 3.14 263323a4bdSKiran Chandramohan N = 1024 273323a4bdSKiran Chandramohan 283323a4bdSKiran Chandramohan! 2.5 parallel-clause -> if-clause | 293323a4bdSKiran Chandramohan! num-threads-clause | 303323a4bdSKiran Chandramohan! default-clause | 313323a4bdSKiran Chandramohan! private-clause | 323323a4bdSKiran Chandramohan! firstprivate-clause | 333323a4bdSKiran Chandramohan! shared-clause | 343323a4bdSKiran Chandramohan! copyin-clause | 353323a4bdSKiran Chandramohan! reduction-clause | 363323a4bdSKiran Chandramohan! proc-bind-clause | 373323a4bdSKiran Chandramohan! allocate-clause 383323a4bdSKiran Chandramohan 393323a4bdSKiran Chandramohan !$omp parallel 403323a4bdSKiran Chandramohan do i = 1, N 413323a4bdSKiran Chandramohan a = 3.14 423323a4bdSKiran Chandramohan enddo 433323a4bdSKiran Chandramohan !$omp end parallel 443323a4bdSKiran Chandramohan 453323a4bdSKiran Chandramohan !$omp parallel private(b) allocate(b) 463323a4bdSKiran Chandramohan do i = 1, N 473323a4bdSKiran Chandramohan a = 3.14 483323a4bdSKiran Chandramohan enddo 493323a4bdSKiran Chandramohan !$omp end parallel 503323a4bdSKiran Chandramohan 513323a4bdSKiran Chandramohan !$omp parallel private(c, b) allocate(omp_default_mem_space : b, c) 523323a4bdSKiran Chandramohan do i = 1, N 533323a4bdSKiran Chandramohan a = 3.14 543323a4bdSKiran Chandramohan enddo 553323a4bdSKiran Chandramohan !$omp end parallel 563323a4bdSKiran Chandramohan 573323a4bdSKiran Chandramohan !$omp parallel allocate(b) allocate(c) private(b, c) 583323a4bdSKiran Chandramohan do i = 1, N 593323a4bdSKiran Chandramohan a = 3.14 603323a4bdSKiran Chandramohan enddo 613323a4bdSKiran Chandramohan !$omp end parallel 623323a4bdSKiran Chandramohan 633323a4bdSKiran Chandramohan !$omp parallel allocate(xy_alloc :b) private(b) 643323a4bdSKiran Chandramohan do i = 1, N 653323a4bdSKiran Chandramohan a = 3.14 663323a4bdSKiran Chandramohan enddo 673323a4bdSKiran Chandramohan !$omp end parallel 683323a4bdSKiran Chandramohan 693323a4bdSKiran Chandramohan !$omp task private(b) allocate(b) 703323a4bdSKiran Chandramohan do i = 1, N 713323a4bdSKiran Chandramohan z = 2 723323a4bdSKiran Chandramohan end do 733323a4bdSKiran Chandramohan !$omp end task 743323a4bdSKiran Chandramohan 753323a4bdSKiran Chandramohan !$omp teams private(b) allocate(b) 763323a4bdSKiran Chandramohan do i = 1, N 773323a4bdSKiran Chandramohan z = 2 783323a4bdSKiran Chandramohan end do 793323a4bdSKiran Chandramohan !$omp end teams 803323a4bdSKiran Chandramohan 813323a4bdSKiran Chandramohan !$omp target private(b) allocate(b) 823323a4bdSKiran Chandramohan do i = 1, N 833323a4bdSKiran Chandramohan z = 2 843323a4bdSKiran Chandramohan end do 853323a4bdSKiran Chandramohan !$omp end target 863323a4bdSKiran Chandramohan 873323a4bdSKiran Chandramohan !ERROR: ALLOCATE clause is not allowed on the TARGET DATA directive 883323a4bdSKiran Chandramohan !$omp target data map(from: b) allocate(b) 893323a4bdSKiran Chandramohan do i = 1, N 903323a4bdSKiran Chandramohan z = 2 913323a4bdSKiran Chandramohan enddo 923323a4bdSKiran Chandramohan !$omp end target data 933323a4bdSKiran Chandramohan 943323a4bdSKiran Chandramohan !ERROR: SCHEDULE clause is not allowed on the PARALLEL directive 953323a4bdSKiran Chandramohan !$omp parallel schedule(static) 963323a4bdSKiran Chandramohan do i = 1, N 973323a4bdSKiran Chandramohan a = 3.14 983323a4bdSKiran Chandramohan enddo 993323a4bdSKiran Chandramohan !$omp end parallel 1003323a4bdSKiran Chandramohan 1013323a4bdSKiran Chandramohan !ERROR: COLLAPSE clause is not allowed on the PARALLEL directive 1023323a4bdSKiran Chandramohan !$omp parallel collapse(2) 1033323a4bdSKiran Chandramohan do i = 1, N 1043323a4bdSKiran Chandramohan do j = 1, N 1053323a4bdSKiran Chandramohan a = 3.14 1063323a4bdSKiran Chandramohan enddo 1073323a4bdSKiran Chandramohan enddo 1083323a4bdSKiran Chandramohan !$omp end parallel 1093323a4bdSKiran Chandramohan 1103323a4bdSKiran Chandramohan !ERROR: The parameter of the COLLAPSE clause must be a constant positive integer expression 1113323a4bdSKiran Chandramohan !$omp do collapse(-1) 1123323a4bdSKiran Chandramohan do i = 1, N 1133323a4bdSKiran Chandramohan do j = 1, N 1143323a4bdSKiran Chandramohan a = 3.14 1153323a4bdSKiran Chandramohan enddo 1163323a4bdSKiran Chandramohan enddo 1173323a4bdSKiran Chandramohan !$omp end do 1183323a4bdSKiran Chandramohan 1193323a4bdSKiran Chandramohan a = 1.0 1203323a4bdSKiran Chandramohan !$omp parallel firstprivate(a) 1213323a4bdSKiran Chandramohan do i = 1, N 1223323a4bdSKiran Chandramohan a = 3.14 1233323a4bdSKiran Chandramohan enddo 1243323a4bdSKiran Chandramohan !ERROR: NUM_THREADS clause is not allowed on the END PARALLEL directive 1253323a4bdSKiran Chandramohan !$omp end parallel num_threads(4) 1263323a4bdSKiran Chandramohan 1273323a4bdSKiran Chandramohan !ERROR: LASTPRIVATE clause is not allowed on the PARALLEL directive 1283323a4bdSKiran Chandramohan !ERROR: NUM_TASKS clause is not allowed on the PARALLEL directive 1293323a4bdSKiran Chandramohan !ERROR: INBRANCH clause is not allowed on the PARALLEL directive 1303323a4bdSKiran Chandramohan !$omp parallel lastprivate(a) NUM_TASKS(4) inbranch 1313323a4bdSKiran Chandramohan do i = 1, N 1323323a4bdSKiran Chandramohan a = 3.14 1333323a4bdSKiran Chandramohan enddo 1343323a4bdSKiran Chandramohan !$omp end parallel 1353323a4bdSKiran Chandramohan 1363323a4bdSKiran Chandramohan !ERROR: At most one NUM_THREADS clause can appear on the PARALLEL directive 1373323a4bdSKiran Chandramohan !$omp parallel num_threads(2) num_threads(4) 1383323a4bdSKiran Chandramohan do i = 1, N 1393323a4bdSKiran Chandramohan a = 3.14 1403323a4bdSKiran Chandramohan enddo 1413323a4bdSKiran Chandramohan !$omp end parallel 1423323a4bdSKiran Chandramohan 1433323a4bdSKiran Chandramohan !ERROR: The parameter of the NUM_THREADS clause must be a positive integer expression 1443323a4bdSKiran Chandramohan !$omp parallel num_threads(1-4) 1453323a4bdSKiran Chandramohan do i = 1, N 1463323a4bdSKiran Chandramohan a = 3.14 1473323a4bdSKiran Chandramohan enddo 1483323a4bdSKiran Chandramohan !ERROR: NOWAIT clause is not allowed on the END PARALLEL directive 1493323a4bdSKiran Chandramohan !$omp end parallel nowait 1503323a4bdSKiran Chandramohan 1513323a4bdSKiran Chandramohan !$omp parallel num_threads(num-10) 1523323a4bdSKiran Chandramohan do i = 1, N 1533323a4bdSKiran Chandramohan a = 3.14 1543323a4bdSKiran Chandramohan enddo 1553323a4bdSKiran Chandramohan !$omp end parallel 1563323a4bdSKiran Chandramohan 1573323a4bdSKiran Chandramohan !$omp parallel num_threads(b+1) 1583323a4bdSKiran Chandramohan do i = 1, N 1593323a4bdSKiran Chandramohan a = 3.14 1603323a4bdSKiran Chandramohan enddo 1613323a4bdSKiran Chandramohan !$omp end parallel 1623323a4bdSKiran Chandramohan 1633323a4bdSKiran Chandramohan !$omp parallel 1643323a4bdSKiran Chandramohan do i = 1, N 1653323a4bdSKiran Chandramohan enddo 1663323a4bdSKiran Chandramohan !ERROR: Unmatched END TARGET directive 1673323a4bdSKiran Chandramohan !$omp end target 1683323a4bdSKiran Chandramohan 1693323a4bdSKiran Chandramohan ! OMP 5.0 - 2.6 Restriction point 1 1703323a4bdSKiran Chandramohan outofparallel: do k =1, 10 1713323a4bdSKiran Chandramohan !$omp parallel 1723323a4bdSKiran Chandramohan !$omp do 1733323a4bdSKiran Chandramohan outer: do i=0, 10 1743323a4bdSKiran Chandramohan inner: do j=1, 10 1753323a4bdSKiran Chandramohan exit 176977cb5d1SKiran Chandramohan !ERROR: EXIT statement terminates associated loop of an OpenMP DO construct 1773323a4bdSKiran Chandramohan exit outer 1783323a4bdSKiran Chandramohan !ERROR: EXIT to construct 'outofparallel' outside of PARALLEL construct is not allowed 1793323a4bdSKiran Chandramohan !ERROR: EXIT to construct 'outofparallel' outside of DO construct is not allowed 1803323a4bdSKiran Chandramohan exit outofparallel 1813323a4bdSKiran Chandramohan end do inner 1823323a4bdSKiran Chandramohan end do outer 1833323a4bdSKiran Chandramohan !$omp end do 1843323a4bdSKiran Chandramohan !$omp end parallel 1853323a4bdSKiran Chandramohan end do outofparallel 1863323a4bdSKiran Chandramohan 1873323a4bdSKiran Chandramohan! 2.7.1 do-clause -> private-clause | 1883323a4bdSKiran Chandramohan! firstprivate-clause | 1893323a4bdSKiran Chandramohan! lastprivate-clause | 1903323a4bdSKiran Chandramohan! linear-clause | 1913323a4bdSKiran Chandramohan! reduction-clause | 1923323a4bdSKiran Chandramohan! schedule-clause | 1933323a4bdSKiran Chandramohan! collapse-clause | 1943323a4bdSKiran Chandramohan! ordered-clause 1953323a4bdSKiran Chandramohan 1963323a4bdSKiran Chandramohan !ERROR: When SCHEDULE clause has AUTO specified, it must not have chunk size specified 1973323a4bdSKiran Chandramohan !ERROR: At most one SCHEDULE clause can appear on the DO directive 1983323a4bdSKiran Chandramohan !ERROR: When SCHEDULE clause has RUNTIME specified, it must not have chunk size specified 1993323a4bdSKiran Chandramohan !$omp do schedule(auto, 2) schedule(runtime, 2) 2003323a4bdSKiran Chandramohan do i = 1, N 2013323a4bdSKiran Chandramohan a = 3.14 2023323a4bdSKiran Chandramohan enddo 2033323a4bdSKiran Chandramohan 2043323a4bdSKiran Chandramohan !ERROR: A modifier may not be specified in a LINEAR clause on the DO directive 2053323a4bdSKiran Chandramohan !$omp do linear(ref(b)) 2063323a4bdSKiran Chandramohan do i = 1, N 2073323a4bdSKiran Chandramohan a = 3.14 2083323a4bdSKiran Chandramohan enddo 2093323a4bdSKiran Chandramohan 2103323a4bdSKiran Chandramohan !ERROR: The NONMONOTONIC modifier can only be specified with SCHEDULE(DYNAMIC) or SCHEDULE(GUIDED) 2113323a4bdSKiran Chandramohan !ERROR: The NONMONOTONIC modifier cannot be specified if an ORDERED clause is specified 2123323a4bdSKiran Chandramohan !$omp do schedule(NONMONOTONIC:static) ordered 2133323a4bdSKiran Chandramohan do i = 1, N 2143323a4bdSKiran Chandramohan a = 3.14 2153323a4bdSKiran Chandramohan enddo 2163323a4bdSKiran Chandramohan 2173323a4bdSKiran Chandramohan !$omp do schedule(simd, monotonic:dynamic) 2183323a4bdSKiran Chandramohan do i = 1, N 2193323a4bdSKiran Chandramohan a = 3.14 2203323a4bdSKiran Chandramohan enddo 2213323a4bdSKiran Chandramohan 2223323a4bdSKiran Chandramohan !ERROR: Clause LINEAR is not allowed if clause ORDERED appears on the DO directive 2233323a4bdSKiran Chandramohan !ERROR: The parameter of the ORDERED clause must be a constant positive integer expression 224*03cbe426SKrzysztof Parzyszek !ERROR: 'b' appears in more than one data-sharing clause on the same OpenMP directive 2253323a4bdSKiran Chandramohan !$omp do ordered(1-1) private(b) linear(b) linear(a) 2263323a4bdSKiran Chandramohan do i = 1, N 2273323a4bdSKiran Chandramohan a = 3.14 2283323a4bdSKiran Chandramohan enddo 2293323a4bdSKiran Chandramohan 230*03cbe426SKrzysztof Parzyszek !ERROR: Clause LINEAR is not allowed if clause ORDERED appears on the DO directive 231*03cbe426SKrzysztof Parzyszek !ERROR: The parameter of the ORDERED clause must be a constant positive integer expression 232*03cbe426SKrzysztof Parzyszek !$omp do ordered(1-1) linear(a) 233*03cbe426SKrzysztof Parzyszek do i = 1, N 234*03cbe426SKrzysztof Parzyszek a = 3.14 235*03cbe426SKrzysztof Parzyszek enddo 236*03cbe426SKrzysztof Parzyszek 2373323a4bdSKiran Chandramohan !ERROR: The parameter of the ORDERED clause must be greater than or equal to the parameter of the COLLAPSE clause 2383323a4bdSKiran Chandramohan !$omp do collapse(num-14) ordered(1) 2393323a4bdSKiran Chandramohan do i = 1, N 2403323a4bdSKiran Chandramohan do j = 1, N 2413323a4bdSKiran Chandramohan do k = 1, N 2423323a4bdSKiran Chandramohan a = 3.14 2433323a4bdSKiran Chandramohan enddo 2443323a4bdSKiran Chandramohan enddo 2453323a4bdSKiran Chandramohan enddo 2463323a4bdSKiran Chandramohan 2473323a4bdSKiran Chandramohan !$omp parallel do simd if(parallel:a>1.) 2483323a4bdSKiran Chandramohan do i = 1, N 2493323a4bdSKiran Chandramohan enddo 2503323a4bdSKiran Chandramohan !$omp end parallel do simd 2513323a4bdSKiran Chandramohan 25233faa828SKrzysztof Parzyszek !ERROR: TARGET is not a constituent of the PARALLEL DO directive 2533323a4bdSKiran Chandramohan !$omp parallel do if(target:a>1.) 2543323a4bdSKiran Chandramohan do i = 1, N 2553323a4bdSKiran Chandramohan enddo 2563323a4bdSKiran Chandramohan !ERROR: Unmatched END SIMD directive 2573323a4bdSKiran Chandramohan !$omp end simd 2583323a4bdSKiran Chandramohan 2593323a4bdSKiran Chandramohan! 2.7.2 sections-clause -> private-clause | 2603323a4bdSKiran Chandramohan! firstprivate-clause | 2613323a4bdSKiran Chandramohan! lastprivate-clause | 2623323a4bdSKiran Chandramohan! reduction-clause 2633323a4bdSKiran Chandramohan 2643323a4bdSKiran Chandramohan !$omp parallel 2653323a4bdSKiran Chandramohan !$omp sections 2663323a4bdSKiran Chandramohan !$omp section 2673323a4bdSKiran Chandramohan a = 0.0 2683323a4bdSKiran Chandramohan !$omp section 2693323a4bdSKiran Chandramohan b = 1 2703323a4bdSKiran Chandramohan !$omp end sections nowait 2713323a4bdSKiran Chandramohan !$omp end parallel 2723323a4bdSKiran Chandramohan 2733323a4bdSKiran Chandramohan !$omp parallel 2743323a4bdSKiran Chandramohan !$omp sections 2753323a4bdSKiran Chandramohan !$omp section 2763323a4bdSKiran Chandramohan a = 0.0 2773323a4bdSKiran Chandramohan !ERROR: Unmatched END PARALLEL SECTIONS directive 2783323a4bdSKiran Chandramohan !$omp end parallel sections 2793323a4bdSKiran Chandramohan !$omp end parallel 2803323a4bdSKiran Chandramohan 2813323a4bdSKiran Chandramohan !$omp parallel 2823323a4bdSKiran Chandramohan !$omp sections 2833323a4bdSKiran Chandramohan a = 0.0 2843323a4bdSKiran Chandramohan b = 1 2853323a4bdSKiran Chandramohan !$omp section 2863323a4bdSKiran Chandramohan c = 1 2873323a4bdSKiran Chandramohan d = 2 2883323a4bdSKiran Chandramohan !ERROR: NUM_THREADS clause is not allowed on the END SECTIONS directive 2893323a4bdSKiran Chandramohan !$omp end sections num_threads(4) 2903323a4bdSKiran Chandramohan 2913323a4bdSKiran Chandramohan !$omp parallel 2923323a4bdSKiran Chandramohan !$omp sections 2933323a4bdSKiran Chandramohan b = 1 2943323a4bdSKiran Chandramohan !$omp section 2953323a4bdSKiran Chandramohan c = 1 2963323a4bdSKiran Chandramohan d = 2 2973323a4bdSKiran Chandramohan !ERROR: At most one NOWAIT clause can appear on the END SECTIONS directive 2983323a4bdSKiran Chandramohan !$omp end sections nowait nowait 2993323a4bdSKiran Chandramohan !$omp end parallel 3003323a4bdSKiran Chandramohan 3013323a4bdSKiran Chandramohan !$omp end parallel 3023323a4bdSKiran Chandramohan 3033323a4bdSKiran Chandramohan! 2.11.2 parallel-sections-clause -> parallel-clause | 3043323a4bdSKiran Chandramohan! sections-clause 3053323a4bdSKiran Chandramohan 3063323a4bdSKiran Chandramohan !$omp parallel sections num_threads(4) private(b) lastprivate(d) 3073323a4bdSKiran Chandramohan a = 0.0 3083323a4bdSKiran Chandramohan !$omp section 3093323a4bdSKiran Chandramohan b = 1 3103323a4bdSKiran Chandramohan c = 2 3113323a4bdSKiran Chandramohan !$omp section 3123323a4bdSKiran Chandramohan d = 3 3133323a4bdSKiran Chandramohan !$omp end parallel sections 3143323a4bdSKiran Chandramohan 3153323a4bdSKiran Chandramohan !ERROR: At most one NUM_THREADS clause can appear on the PARALLEL SECTIONS directive 3163323a4bdSKiran Chandramohan !$omp parallel sections num_threads(1) num_threads(4) 3173323a4bdSKiran Chandramohan a = 0.0 3183323a4bdSKiran Chandramohan !ERROR: Unmatched END SECTIONS directive 3193323a4bdSKiran Chandramohan !$omp end sections 3203323a4bdSKiran Chandramohan 3213323a4bdSKiran Chandramohan !$omp parallel sections 3223323a4bdSKiran Chandramohan !ERROR: NOWAIT clause is not allowed on the END PARALLEL SECTIONS directive 3233323a4bdSKiran Chandramohan !$omp end parallel sections nowait 3243323a4bdSKiran Chandramohan 3253323a4bdSKiran Chandramohan! 2.7.3 single-clause -> private-clause | 3263323a4bdSKiran Chandramohan! firstprivate-clause 3273323a4bdSKiran Chandramohan! end-single-clause -> copyprivate-clause | 3283323a4bdSKiran Chandramohan! nowait-clause 3293323a4bdSKiran Chandramohan 3303323a4bdSKiran Chandramohan !$omp parallel 3313323a4bdSKiran Chandramohan b = 1 3323323a4bdSKiran Chandramohan !ERROR: LASTPRIVATE clause is not allowed on the SINGLE directive 333666a6197SKiran Kumar T P !ERROR: NOWAIT clause is not allowed on the OMP SINGLE directive, use it on OMP END SINGLE directive 334666a6197SKiran Kumar T P !$omp single private(a) lastprivate(c) nowait 3353323a4bdSKiran Chandramohan a = 3.14 3363323a4bdSKiran Chandramohan !ERROR: Clause NOWAIT is not allowed if clause COPYPRIVATE appears on the END SINGLE directive 3373323a4bdSKiran Chandramohan !ERROR: COPYPRIVATE variable 'a' may not appear on a PRIVATE or FIRSTPRIVATE clause on a SINGLE construct 3383323a4bdSKiran Chandramohan !ERROR: At most one NOWAIT clause can appear on the END SINGLE directive 3393323a4bdSKiran Chandramohan !$omp end single copyprivate(a) nowait nowait 3403323a4bdSKiran Chandramohan c = 2 3413323a4bdSKiran Chandramohan !$omp end parallel 3423323a4bdSKiran Chandramohan 3433323a4bdSKiran Chandramohan! 2.7.4 workshare 3443323a4bdSKiran Chandramohan 3453323a4bdSKiran Chandramohan !$omp parallel 3463323a4bdSKiran Chandramohan !$omp workshare 3473323a4bdSKiran Chandramohan a = 1.0 3483323a4bdSKiran Chandramohan !$omp end workshare nowait 3493323a4bdSKiran Chandramohan !ERROR: NUM_THREADS clause is not allowed on the WORKSHARE directive 3503323a4bdSKiran Chandramohan !$omp workshare num_threads(4) 3513323a4bdSKiran Chandramohan a = 1.0 3523323a4bdSKiran Chandramohan !ERROR: COPYPRIVATE clause is not allowed on the END WORKSHARE directive 3533323a4bdSKiran Chandramohan !$omp end workshare nowait copyprivate(a) 3541334c034SKrzysztof Parzyszek !ERROR: NOWAIT clause is not allowed on the OMP WORKSHARE directive, use it on OMP END WORKSHARE directive 3554078afc6SKrzysztof Parzyszek !$omp workshare nowait 3564078afc6SKrzysztof Parzyszek !$omp end workshare 3573323a4bdSKiran Chandramohan !$omp end parallel 3583323a4bdSKiran Chandramohan 3593323a4bdSKiran Chandramohan! 2.8.1 simd-clause -> safelen-clause | 3603323a4bdSKiran Chandramohan! simdlen-clause | 3613323a4bdSKiran Chandramohan! linear-clause | 3623323a4bdSKiran Chandramohan! aligned-clause | 3633323a4bdSKiran Chandramohan! private-clause | 3643323a4bdSKiran Chandramohan! lastprivate-clause | 3653323a4bdSKiran Chandramohan! reduction-clause | 3663323a4bdSKiran Chandramohan! collapse-clause 3673323a4bdSKiran Chandramohan 3683323a4bdSKiran Chandramohan a = 0.0 3693323a4bdSKiran Chandramohan !ERROR: TASK_REDUCTION clause is not allowed on the SIMD directive 3703323a4bdSKiran Chandramohan !$omp simd private(b) reduction(+:a) task_reduction(+:a) 3713323a4bdSKiran Chandramohan do i = 1, N 3723323a4bdSKiran Chandramohan a = a + b + 3.14 3733323a4bdSKiran Chandramohan enddo 3743323a4bdSKiran Chandramohan 3753323a4bdSKiran Chandramohan !ERROR: At most one SAFELEN clause can appear on the SIMD directive 3763323a4bdSKiran Chandramohan !$omp simd safelen(1) safelen(2) 3773323a4bdSKiran Chandramohan do i = 1, N 3783323a4bdSKiran Chandramohan a = 3.14 3793323a4bdSKiran Chandramohan enddo 3803323a4bdSKiran Chandramohan 3813323a4bdSKiran Chandramohan !ERROR: The parameter of the SIMDLEN clause must be a constant positive integer expression 3823323a4bdSKiran Chandramohan !$omp simd simdlen(-1) 3833323a4bdSKiran Chandramohan do i = 1, N 3843323a4bdSKiran Chandramohan a = 3.14 3853323a4bdSKiran Chandramohan enddo 3863323a4bdSKiran Chandramohan 38705096590SKrzysztof Parzyszek !ERROR: The alignment value should be a constant positive integer 388f36a2547SRaghu Maddhipatla !$omp simd aligned(cpt:-2) 3893323a4bdSKiran Chandramohan do i = 1, N 3903323a4bdSKiran Chandramohan a = 3.14 3913323a4bdSKiran Chandramohan enddo 3923323a4bdSKiran Chandramohan 3933323a4bdSKiran Chandramohan !$omp parallel 3943323a4bdSKiran Chandramohan !ERROR: The parameter of the SIMDLEN clause must be less than or equal to the parameter of the SAFELEN clause 3953323a4bdSKiran Chandramohan !$omp simd safelen(1+1) simdlen(1+2) 3963323a4bdSKiran Chandramohan do i = 1, N 3973323a4bdSKiran Chandramohan a = 3.14 3983323a4bdSKiran Chandramohan enddo 3993323a4bdSKiran Chandramohan !$omp end parallel 4003323a4bdSKiran Chandramohan 401e6321d94SThirumalai Shaktivel !ERROR: The `SAFELEN` clause cannot appear in the `SIMD` directive with `ORDER(CONCURRENT)` clause 402e6321d94SThirumalai Shaktivel !$omp simd order(concurrent) safelen(1+2) 403e6321d94SThirumalai Shaktivel do i = 1, N 404e6321d94SThirumalai Shaktivel a = 3.14 405e6321d94SThirumalai Shaktivel enddo 406e6321d94SThirumalai Shaktivel 4073323a4bdSKiran Chandramohan! 2.11.1 parallel-do-clause -> parallel-clause | 4083323a4bdSKiran Chandramohan! do-clause 4093323a4bdSKiran Chandramohan 4103323a4bdSKiran Chandramohan !ERROR: At most one PROC_BIND clause can appear on the PARALLEL DO directive 4113323a4bdSKiran Chandramohan !ERROR: A modifier may not be specified in a LINEAR clause on the PARALLEL DO directive 4123323a4bdSKiran Chandramohan !$omp parallel do proc_bind(master) proc_bind(close) linear(val(b)) 4133323a4bdSKiran Chandramohan do i = 1, N 4143323a4bdSKiran Chandramohan a = 3.14 4153323a4bdSKiran Chandramohan enddo 4163323a4bdSKiran Chandramohan 4173323a4bdSKiran Chandramohan! 2.8.3 do-simd-clause -> do-clause | 4183323a4bdSKiran Chandramohan! simd-clause 4193323a4bdSKiran Chandramohan 4203323a4bdSKiran Chandramohan !$omp parallel 4213323a4bdSKiran Chandramohan !ERROR: No ORDERED clause with a parameter can be specified on the DO SIMD directive 4223323a4bdSKiran Chandramohan !ERROR: NOGROUP clause is not allowed on the DO SIMD directive 423666a6197SKiran Kumar T P !ERROR: NOWAIT clause is not allowed on the OMP DO SIMD directive, use it on OMP END DO SIMD directive 424666a6197SKiran Kumar T P !$omp do simd ordered(2) NOGROUP nowait 4253323a4bdSKiran Chandramohan do i = 1, N 4263323a4bdSKiran Chandramohan do j = 1, N 4273323a4bdSKiran Chandramohan a = 3.14 4283323a4bdSKiran Chandramohan enddo 4293323a4bdSKiran Chandramohan enddo 430666a6197SKiran Kumar T P !omp end do nowait 4313323a4bdSKiran Chandramohan !$omp end parallel 4323323a4bdSKiran Chandramohan 4333323a4bdSKiran Chandramohan! 2.11.4 parallel-do-simd-clause -> parallel-clause | 4343323a4bdSKiran Chandramohan! do-simd-clause 4353323a4bdSKiran Chandramohan 4363323a4bdSKiran Chandramohan !$omp parallel do simd collapse(2) safelen(2) & 4373323a4bdSKiran Chandramohan !$omp & simdlen(1) private(c) firstprivate(a) proc_bind(spread) 4383323a4bdSKiran Chandramohan do i = 1, N 4393323a4bdSKiran Chandramohan do j = 1, N 4403323a4bdSKiran Chandramohan a = 3.14 4413323a4bdSKiran Chandramohan enddo 4423323a4bdSKiran Chandramohan enddo 4433323a4bdSKiran Chandramohan 4443323a4bdSKiran Chandramohan! 2.9.2 taskloop -> TASKLOOP [taskloop-clause[ [,] taskloop-clause]...] 4453323a4bdSKiran Chandramohan! taskloop-clause -> if-clause | 4463323a4bdSKiran Chandramohan! shared-clause | 4473323a4bdSKiran Chandramohan! private-clause | 4483323a4bdSKiran Chandramohan! firstprivate-clause | 4493323a4bdSKiran Chandramohan! lastprivate-clause | 4503323a4bdSKiran Chandramohan! default-clause | 4513323a4bdSKiran Chandramohan! grainsize-clause | 4523323a4bdSKiran Chandramohan! num-tasks-clause | 4533323a4bdSKiran Chandramohan! collapse-clause | 4543323a4bdSKiran Chandramohan! final-clause | 4553323a4bdSKiran Chandramohan! priority-clause | 4563323a4bdSKiran Chandramohan! untied-clause | 4573323a4bdSKiran Chandramohan! mergeable-clause | 4583323a4bdSKiran Chandramohan! nogroup-clause 4593323a4bdSKiran Chandramohan 4603323a4bdSKiran Chandramohan !$omp taskloop 4613323a4bdSKiran Chandramohan do i = 1, N 4623323a4bdSKiran Chandramohan a = 3.14 4633323a4bdSKiran Chandramohan enddo 4643323a4bdSKiran Chandramohan 4653323a4bdSKiran Chandramohan !ERROR: SCHEDULE clause is not allowed on the TASKLOOP directive 4663323a4bdSKiran Chandramohan !$omp taskloop schedule(static) 4673323a4bdSKiran Chandramohan do i = 1, N 4683323a4bdSKiran Chandramohan a = 3.14 4693323a4bdSKiran Chandramohan enddo 4703323a4bdSKiran Chandramohan 4713323a4bdSKiran Chandramohan !ERROR: GRAINSIZE and NUM_TASKS clauses are mutually exclusive and may not appear on the same TASKLOOP directive 4723323a4bdSKiran Chandramohan !$omp taskloop num_tasks(3) grainsize(2) 4733323a4bdSKiran Chandramohan do i = 1,N 4743323a4bdSKiran Chandramohan a = 3.14 4753323a4bdSKiran Chandramohan enddo 4763323a4bdSKiran Chandramohan 4773323a4bdSKiran Chandramohan !ERROR: At most one NUM_TASKS clause can appear on the TASKLOOP directive 4783323a4bdSKiran Chandramohan !ERROR: TASK_REDUCTION clause is not allowed on the TASKLOOP directive 4793323a4bdSKiran Chandramohan !$omp taskloop num_tasks(3) num_tasks(2) task_reduction(*:a) 4803323a4bdSKiran Chandramohan do i = 1,N 4813323a4bdSKiran Chandramohan a = 3.14 4823323a4bdSKiran Chandramohan enddo 4833323a4bdSKiran Chandramohan 4843323a4bdSKiran Chandramohan! 2.13.1 master 4853323a4bdSKiran Chandramohan 4863323a4bdSKiran Chandramohan !$omp parallel 487092a819eSKiran Chandramohan !WARNING: OpenMP directive MASTER has been deprecated, please use MASKED instead. 4883323a4bdSKiran Chandramohan !$omp master 4893323a4bdSKiran Chandramohan a=3.14 4903323a4bdSKiran Chandramohan !$omp end master 4913323a4bdSKiran Chandramohan !$omp end parallel 4923323a4bdSKiran Chandramohan 4933323a4bdSKiran Chandramohan !$omp parallel 494092a819eSKiran Chandramohan !WARNING: OpenMP directive MASTER has been deprecated, please use MASKED instead. 4953323a4bdSKiran Chandramohan !ERROR: NUM_THREADS clause is not allowed on the MASTER directive 4963323a4bdSKiran Chandramohan !$omp master num_threads(4) 4973323a4bdSKiran Chandramohan a=3.14 4983323a4bdSKiran Chandramohan !$omp end master 4993323a4bdSKiran Chandramohan !$omp end parallel 5003323a4bdSKiran Chandramohan 5013323a4bdSKiran Chandramohan! Standalone Directives (basic) 5023323a4bdSKiran Chandramohan 5033323a4bdSKiran Chandramohan !$omp taskyield 5043323a4bdSKiran Chandramohan !$omp barrier 5053323a4bdSKiran Chandramohan !$omp taskwait 506f87737f3SKrzysztof Parzyszek !ERROR: The SINK and SOURCE dependence types can only be used with the ORDERED directive, used here in the TASKWAIT construct 5073323a4bdSKiran Chandramohan !$omp taskwait depend(source) 5083323a4bdSKiran Chandramohan ! !$omp taskwait depend(sink:i-1) 5093323a4bdSKiran Chandramohan ! !$omp target enter data map(to:arrayA) map(alloc:arrayB) 5103323a4bdSKiran Chandramohan ! !$omp target update from(arrayA) to(arrayB) 5113323a4bdSKiran Chandramohan ! !$omp target exit data map(from:arrayA) map(delete:arrayB) 5123323a4bdSKiran Chandramohan !$omp flush (c) 5133323a4bdSKiran Chandramohan !$omp flush acq_rel 5143323a4bdSKiran Chandramohan !$omp flush release 5153323a4bdSKiran Chandramohan !$omp flush acquire 5163323a4bdSKiran Chandramohan !ERROR: If memory-order-clause is RELEASE, ACQUIRE, or ACQ_REL, list items must not be specified on the FLUSH directive 5173323a4bdSKiran Chandramohan !$omp flush release (c) 5183323a4bdSKiran Chandramohan !$omp flush seq_cst 5193323a4bdSKiran Chandramohan !ERROR: RELAXED clause is not allowed on the FLUSH directive 5203323a4bdSKiran Chandramohan !$omp flush relaxed 5213323a4bdSKiran Chandramohan 5223323a4bdSKiran Chandramohan! 2.13.2 critical Construct 5233323a4bdSKiran Chandramohan 5243323a4bdSKiran Chandramohan ! !$omp critical (first) 5253323a4bdSKiran Chandramohan a = 3.14 5263323a4bdSKiran Chandramohan ! !$omp end critical (first) 5273323a4bdSKiran Chandramohan 5283323a4bdSKiran Chandramohan! 2.9.1 task-clause -> if-clause | 5293323a4bdSKiran Chandramohan! final-clause | 5303323a4bdSKiran Chandramohan! untied-clause | 5313323a4bdSKiran Chandramohan! default-clause | 5323323a4bdSKiran Chandramohan! mergeable-clause | 5333323a4bdSKiran Chandramohan! private-clause | 5343323a4bdSKiran Chandramohan! firstprivate-clause | 5353323a4bdSKiran Chandramohan! shared-clause | 5363323a4bdSKiran Chandramohan! depend-clause | 5373323a4bdSKiran Chandramohan! priority-clause 5383323a4bdSKiran Chandramohan 5393323a4bdSKiran Chandramohan !$omp task shared(a) default(none) if(task:a > 1.) 5403323a4bdSKiran Chandramohan a = 1. 5413323a4bdSKiran Chandramohan !$omp end task 5423323a4bdSKiran Chandramohan 54333faa828SKrzysztof Parzyszek !ERROR: TASKLOOP is not a constituent of the TASK directive 5443323a4bdSKiran Chandramohan !$omp task private(a) if(taskloop:a.eq.1) 5453323a4bdSKiran Chandramohan a = 1. 5463323a4bdSKiran Chandramohan !$omp end task 5473323a4bdSKiran Chandramohan 5483323a4bdSKiran Chandramohan !ERROR: LASTPRIVATE clause is not allowed on the TASK directive 5493323a4bdSKiran Chandramohan !ERROR: At most one FINAL clause can appear on the TASK directive 5503323a4bdSKiran Chandramohan !$omp task lastprivate(b) final(a.GE.1) final(.false.) 5513323a4bdSKiran Chandramohan b = 1 5523323a4bdSKiran Chandramohan !$omp end task 5533323a4bdSKiran Chandramohan 5543323a4bdSKiran Chandramohan !ERROR: The parameter of the PRIORITY clause must be a positive integer expression 5553323a4bdSKiran Chandramohan !$omp task priority(-1) firstprivate(a) mergeable 5563323a4bdSKiran Chandramohan a = 3.14 5573323a4bdSKiran Chandramohan !$omp end task 5583323a4bdSKiran Chandramohan 5593323a4bdSKiran Chandramohan! 2.9.3 taskloop-simd-clause -> taskloop-clause | 5603323a4bdSKiran Chandramohan! simd-clause 5613323a4bdSKiran Chandramohan 5623323a4bdSKiran Chandramohan !$omp taskloop simd 5633323a4bdSKiran Chandramohan do i = 1, N 5643323a4bdSKiran Chandramohan a = 3.14 5653323a4bdSKiran Chandramohan enddo 5663323a4bdSKiran Chandramohan !$omp end taskloop simd 5673323a4bdSKiran Chandramohan 5683323a4bdSKiran Chandramohan !$omp taskloop simd reduction(+:a) 5693323a4bdSKiran Chandramohan do i = 1, N 5703323a4bdSKiran Chandramohan a = a + 3.14 5713323a4bdSKiran Chandramohan enddo 5723323a4bdSKiran Chandramohan !ERROR: Unmatched END TASKLOOP directive 5733323a4bdSKiran Chandramohan !$omp end taskloop 5743323a4bdSKiran Chandramohan 5753323a4bdSKiran Chandramohan !ERROR: GRAINSIZE and NUM_TASKS clauses are mutually exclusive and may not appear on the same TASKLOOP SIMD directive 5763323a4bdSKiran Chandramohan !$omp taskloop simd num_tasks(3) grainsize(2) 5773323a4bdSKiran Chandramohan do i = 1,N 5783323a4bdSKiran Chandramohan a = 3.14 5793323a4bdSKiran Chandramohan enddo 5803323a4bdSKiran Chandramohan 581f36a2547SRaghu Maddhipatla allocate(allc) 5823323a4bdSKiran Chandramohan !ERROR: The parameter of the SIMDLEN clause must be a constant positive integer expression 58305096590SKrzysztof Parzyszek !ERROR: The alignment value should be a constant positive integer 584f36a2547SRaghu Maddhipatla !$omp taskloop simd simdlen(-1) aligned(allc:-2) 5853323a4bdSKiran Chandramohan do i = 1, N 586f36a2547SRaghu Maddhipatla allc = 3.14 5873323a4bdSKiran Chandramohan enddo 5883323a4bdSKiran Chandramohan 5893323a4bdSKiran Chandramohan !$omp target enter data map(alloc:A) device(0) 5903323a4bdSKiran Chandramohan !$omp target exit data map(delete:A) device(0) 5913323a4bdSKiran Chandramohan 5923323a4bdSKiran Chandramohanend program 593