]> oss.titaniummirror.com Git - msp430-gcc.git/blobdiff - libgomp/testsuite/libgomp.fortran/appendix-a/a.16.1.f90
Imported gcc-4.4.3
[msp430-gcc.git] / libgomp / testsuite / libgomp.fortran / appendix-a / a.16.1.f90
diff --git a/libgomp/testsuite/libgomp.fortran/appendix-a/a.16.1.f90 b/libgomp/testsuite/libgomp.fortran/appendix-a/a.16.1.f90
new file mode 100644 (file)
index 0000000..014d4fd
--- /dev/null
@@ -0,0 +1,41 @@
+! { dg-do run }
+        REAL FUNCTION WORK1(I)
+            INTEGER I
+            WORK1 = 1.0 * I
+            RETURN
+        END FUNCTION WORK1
+
+        REAL FUNCTION WORK2(I)
+            INTEGER I
+            WORK2 = 2.0 * I
+            RETURN
+        END FUNCTION WORK2
+
+        SUBROUTINE SUBA16(X, Y, INDEX, N)
+        REAL X(*), Y(*)
+        INTEGER INDEX(*), N
+        INTEGER I
+!$OMP PARALLEL DO SHARED(X, Y, INDEX, N)
+          DO I=1,N
+!$OMP ATOMIC
+              X(INDEX(I)) = X(INDEX(I)) + WORK1(I)
+            Y(I) = Y(I) + WORK2(I)
+          ENDDO
+      END SUBROUTINE SUBA16
+
+      PROGRAM A16
+        REAL X(1000), Y(10000)
+        INTEGER INDEX(10000)
+        INTEGER I
+        DO I=1,10000
+          INDEX(I) = MOD(I, 1000) + 1
+          Y(I) = 0.0
+        ENDDO
+        DO I = 1,1000
+          X(I) = 0.0
+        ENDDO
+        CALL SUBA16(X, Y, INDEX, 10000)
+        DO I = 1,10
+          PRINT *, "X(", I, ") = ", X(I), ", Y(", I, ") = ", Y(I)
+        ENDDO
+      END PROGRAM A16