brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.4 KiB · 0ec635e Raw
51 lines · plain
1! RUN: %python %S/../test_errors.py %s %flang -fopenmp2! OpenMP Version 4.53! 2.7.4 workshare Construct4! Checks for OpenMP Workshare construct5 6subroutine omp_workshare(aa, bb, cc, dd, ee, ff, n)7  integer i, j, n, a(10), b(10)8  integer, pointer :: p9  integer, target :: t10  real aa(n,n), bb(n,n), cc(n,n), dd(n,n), ee(n,n), ff(n,n)11 12  !ERROR: The structured block in a WORKSHARE construct may consist of only SCALAR or ARRAY assignments, FORALL or WHERE statements, FORALL, WHERE, ATOMIC, CRITICAL or PARALLEL constructs13  !$omp workshare14  p => t15 16  !$omp parallel17  cc = dd18  !$omp end parallel19 20  !ERROR: OpenMP constructs enclosed in WORKSHARE construct may consist of ATOMIC, CRITICAL or PARALLEL constructs only21  !ERROR: A worksharing region may not be closely nested inside a worksharing, explicit task, taskloop, critical, ordered, atomic, or master region22  !$omp parallel workshare23  !ERROR: A worksharing region may not be closely nested inside a worksharing, explicit task, taskloop, critical, ordered, atomic, or master region24  !$omp single25  ee = ff26  !$omp end single27  !$omp end parallel workshare28 29  where (aa .ne. 0) cc = bb / aa30 31  where (b .lt. 2) b = sum(a)32 33  where (aa .ge. 2.0)34    cc = aa + bb35  elsewhere36    cc = dd + ee37  end where38 39  forall (i = 1:10, n > i) a(i) = b(i)40 41  forall (j = 1:10)42    a(j) = a(j) + b(j)43  end forall44 45  !$omp atomic update46  j = j + sum(a)47 48  !$omp end workshare49 50end subroutine omp_workshare51