xref: /openbsd-src/gnu/gcc/libgomp/testsuite/libgomp.fortran/appendix-a/a.4.1.f90 (revision 404b540a9034ac75a6199ad1a32d1bbc7a0d4210)
1*404b540aSrobert! { dg-do run }
2*404b540aSrobert      SUBROUTINE SUBDOMAIN(X, ISTART, IPOINTS)
3*404b540aSrobert          INTEGER ISTART, IPOINTS
4*404b540aSrobert          REAL X(*)
5*404b540aSrobert          INTEGER I
6*404b540aSrobert          DO 100 I=1,IPOINTS
7*404b540aSrobert             X(ISTART+I) = 123.456
8*404b540aSrobert 100      CONTINUE
9*404b540aSrobert      END SUBROUTINE SUBDOMAIN
10*404b540aSrobert      SUBROUTINE SUB(X, NPOINTS)
11*404b540aSrobert          INCLUDE "omp_lib.h"      ! or USE OMP_LIB
12*404b540aSrobert          REAL X(*)
13*404b540aSrobert          INTEGER NPOINTS
14*404b540aSrobert          INTEGER IAM, NT, IPOINTS, ISTART
15*404b540aSrobert!$OMP PARALLEL DEFAULT(PRIVATE) SHARED(X,NPOINTS)
16*404b540aSrobert          IAM = OMP_GET_THREAD_NUM()
17*404b540aSrobert          NT = OMP_GET_NUM_THREADS()
18*404b540aSrobert          IPOINTS = NPOINTS/NT
19*404b540aSrobert          ISTART = IAM * IPOINTS
20*404b540aSrobert          IF (IAM .EQ. NT-1) THEN
21*404b540aSrobert              IPOINTS = NPOINTS - ISTART
22*404b540aSrobert          ENDIF
23*404b540aSrobert          CALL SUBDOMAIN(X,ISTART,IPOINTS)
24*404b540aSrobert!$OMP END PARALLEL
25*404b540aSrobert      END SUBROUTINE SUB
26*404b540aSrobert      PROGRAM A4
27*404b540aSrobert          REAL ARRAY(10000)
28*404b540aSrobert          CALL SUB(ARRAY, 10000)
29*404b540aSrobert      END PROGRAM A4
30