Translate libgomp.oacc-c-c++-common/lib-32.c into Fortran
authorThomas Schwinge <thomas@codesourcery.com>
Wed, 24 May 2017 13:23:45 +0000 (15:23 +0200)
committerThomas Schwinge <tschwinge@gcc.gnu.org>
Wed, 24 May 2017 13:23:45 +0000 (15:23 +0200)
libgomp/
* testsuite/libgomp.oacc-fortran/lib-32-1.f: New file.
* testsuite/libgomp.oacc-fortran/lib-32-2.f: Likewise.

From-SVN: r248411

libgomp/ChangeLog
libgomp/testsuite/libgomp.oacc-c-c++-common/lib-32.c
libgomp/testsuite/libgomp.oacc-fortran/lib-32-1.f [new file with mode: 0644]
libgomp/testsuite/libgomp.oacc-fortran/lib-32-2.f [new file with mode: 0644]

index 4a9575567b37df47f84041fcb827aea491da96ba..af8c5ca07fc2ed9d1535d445b1e50ef03f3112bf 100644 (file)
@@ -1,5 +1,8 @@
 2017-05-24  Thomas Schwinge  <thomas@codesourcery.com>
 
+       * testsuite/libgomp.oacc-fortran/lib-32-1.f: New file.
+       * testsuite/libgomp.oacc-fortran/lib-32-2.f: Likewise.
+
        * openacc.h (acc_pcopyin, acc_pcreate): Provide prototypes instead
        of preprocessor definitions.
        * libgomp.h (strong_alias): Guard by "#ifdef
index 6a9e995530fe155efd580561d7f92ad87f2f5714..1696fb6f9ef7ca7bcbb62ab064530c2ff7f19db4 100644 (file)
@@ -1,4 +1,5 @@
 /* acc_present_or_create, acc_present_or_copyin, etc.  */
+/* See also Fortran variants in "../libgomp.oacc-fortran/lib-32*".  */
 
 #include <stdbool.h>
 #include <stdlib.h>
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/lib-32-1.f b/libgomp/testsuite/libgomp.oacc-fortran/lib-32-1.f
new file mode 100644 (file)
index 0000000..4606d77
--- /dev/null
@@ -0,0 +1,179 @@
+!     ACC_PRESENT_OR_CREATE, ACC_PRESENT_OR_COPYIN, etc.
+!     Variant of "../libgomp.oacc-c-c++-common/lib-32.c".
+!     Variant using "openacc_lib.h".
+
+!     { dg-do run }
+
+      PROGRAM MAIN
+      IMPLICIT NONE
+      INCLUDE "openacc_lib.h"
+
+      INTEGER, PARAMETER :: N = 10000
+      INTEGER, ALLOCATABLE :: H(:)
+      INTEGER :: I
+      LOGICAL :: SHARED_MEM
+
+      ALLOCATE (H(N))
+      DO I = 1, N
+         H(I) = I + 0
+      END DO
+
+      SHARED_MEM = ACC_IS_PRESENT (H)
+
+      CALL ACC_PRESENT_OR_CREATE (H)
+      IF (.NOT. ACC_IS_PRESENT (H)) CALL ABORT
+
+!$ACC PARALLEL LOOP DEFAULT (PRESENT)
+      DO I = 1, N
+         H(I) = I + 1
+      END DO
+!$ACC END PARALLEL LOOP
+
+      DO I = 1, N
+         IF (H(I) .NE. I + MERGE (1, 0, SHARED_MEM)) CALL ABORT
+         H(I) = I + 2
+      END DO
+
+      CALL ACC_PRESENT_OR_CREATE (H)
+
+!$ACC PARALLEL LOOP DEFAULT (PRESENT)
+      DO I = 1, N
+         IF (H(I) .NE. I + MERGE (2, 1, SHARED_MEM)) CALL ABORT
+         H(I) = I + 3
+      END DO
+!$ACC END PARALLEL LOOP
+
+      DO I = 1, N
+         IF (H(I) .NE. I + MERGE (3, 2, SHARED_MEM)) CALL ABORT
+         H(I) = I + 4
+      END DO
+
+!      CALL ACC_PCREATE (H)
+      CALL ACC_PRESENT_OR_CREATE (H)
+
+!$ACC PARALLEL LOOP DEFAULT (PRESENT)
+      DO I = 1, N
+         IF (H(I) .NE. I + MERGE (4, 3, SHARED_MEM)) CALL ABORT
+         H(I) = I + 5
+      END DO
+!$ACC END PARALLEL LOOP
+
+      DO I = 1, N
+         IF (H(I) .NE. I + MERGE (5, 4, SHARED_MEM)) CALL ABORT
+         H(I) = I + 6
+      END DO
+
+      CALL ACC_PRESENT_OR_COPYIN (H)
+
+!$ACC PARALLEL LOOP DEFAULT (PRESENT)
+      DO I = 1, N
+         IF (H(I) .NE. I + MERGE (6, 5, SHARED_MEM)) CALL ABORT
+         H(I) = I + 7
+      END DO
+!$ACC END PARALLEL LOOP
+
+      DO I = 1, N
+         IF (H(I) .NE. I + MERGE (7, 6, SHARED_MEM)) CALL ABORT
+         H(I) = I + 8
+      END DO
+
+!      CALL ACC_PCOPYIN (H)
+      CALL ACC_PRESENT_OR_COPYIN (H)
+
+!$ACC PARALLEL LOOP DEFAULT (PRESENT)
+      DO I = 1, N
+         IF (H(I) .NE. I + MERGE (8, 7, SHARED_MEM)) CALL ABORT
+         H(I) = I + 9
+      END DO
+!$ACC END PARALLEL LOOP
+
+      DO I = 1, N
+         IF (H(I) .NE. I + MERGE (9, 8, SHARED_MEM)) CALL ABORT
+         H(I) = I + 10
+      END DO
+
+      CALL ACC_COPYOUT (H)
+      IF (.NOT. SHARED_MEM) THEN
+         IF (ACC_IS_PRESENT (H)) CALL ABORT
+      ENDIF
+
+      DO I = 1, N
+         IF (H(I) .NE. I + MERGE (10, 9, SHARED_MEM)) CALL ABORT
+      END DO
+
+!      CALL ACC_PCOPYIN (H)
+      CALL ACC_PRESENT_OR_COPYIN (H)
+      IF (.NOT. ACC_IS_PRESENT (H)) CALL ABORT
+
+!$ACC PARALLEL LOOP DEFAULT (PRESENT)
+      DO I = 1, N
+         IF (H(I) .NE. I + MERGE (10, 9, SHARED_MEM)) CALL ABORT
+         H(I) = I + 11
+      END DO
+!$ACC END PARALLEL LOOP
+
+      DO I = 1, N
+         IF (H(I) .NE. I + MERGE (11, 9, SHARED_MEM)) CALL ABORT
+         H(I) = I + 12
+      END DO
+
+!      CALL ACC_PCOPYIN (H)
+      CALL ACC_PRESENT_OR_COPYIN (H)
+
+!$ACC PARALLEL LOOP DEFAULT (PRESENT)
+      DO I = 1, N
+         IF (H(I) .NE. I + MERGE (12, 11, SHARED_MEM)) CALL ABORT
+         H(I) = I + 13
+      END DO
+!$ACC END PARALLEL LOOP
+
+      DO I = 1, N
+         IF (H(I) .NE. I + MERGE (13, 12, SHARED_MEM)) CALL ABORT
+         H(I) = I + 14
+      END DO
+
+!      CALL ACC_PCREATE (H)
+      CALL ACC_PRESENT_OR_CREATE (H)
+
+!$ACC PARALLEL LOOP DEFAULT (PRESENT)
+      DO I = 1, N
+         IF (H(I) .NE. I + MERGE (14, 13, SHARED_MEM)) CALL ABORT
+         H(I) = I + 15
+      END DO
+!$ACC END PARALLEL LOOP
+
+      DO I = 1, N
+         IF (H(I) .NE. I + MERGE (15, 14, SHARED_MEM)) CALL ABORT
+         H(I) = I + 16
+      END DO
+
+!      CALL ACC_PCREATE (H)
+      CALL ACC_PRESENT_OR_CREATE (H)
+
+!$ACC PARALLEL LOOP DEFAULT (PRESENT)
+      DO I = 1, N
+         IF (H(I) .NE. I + MERGE (16, 15, SHARED_MEM)) CALL ABORT
+         H(I) = I + 17
+      END DO
+!$ACC END PARALLEL LOOP
+
+      DO I = 1, N
+         IF (H(I) .NE. I + MERGE (17, 16, SHARED_MEM)) CALL ABORT
+         H(I) = I + 18
+      END DO
+
+      CALL ACC_UPDATE_SELF (H)
+      IF (.NOT. ACC_IS_PRESENT (H)) CALL ABORT
+
+      DO I = 1, N
+         IF (H(I) .NE. I + MERGE (18, 17, SHARED_MEM)) CALL ABORT
+      END DO
+
+      CALL ACC_DELETE (H)
+      IF (.NOT. SHARED_MEM) THEN
+         IF (ACC_IS_PRESENT (H)) CALL ABORT
+      ENDIF
+
+      DEALLOCATE (H)
+
+      END PROGRAM MAIN
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/lib-32-2.f b/libgomp/testsuite/libgomp.oacc-fortran/lib-32-2.f
new file mode 100644 (file)
index 0000000..88f5566
--- /dev/null
@@ -0,0 +1,173 @@
+!     ACC_PRESENT_OR_CREATE, ACC_PRESENT_OR_COPYIN, etc.
+!     Variant of "../libgomp.oacc-c-c++-common/lib-32.c".
+!     Variant using the "openacc" module.
+
+!     { dg-do run }
+
+      PROGRAM MAIN
+      USE OPENACC
+      IMPLICIT NONE
+
+      INTEGER, PARAMETER :: N = 10000
+      INTEGER, ALLOCATABLE :: H(:)
+      INTEGER :: I
+      LOGICAL :: SHARED_MEM
+
+      ALLOCATE (H(N))
+      DO I = 1, N
+         H(I) = I + 0
+      END DO
+
+      SHARED_MEM = ACC_IS_PRESENT (H)
+
+      CALL ACC_PRESENT_OR_CREATE (H)
+      IF (.NOT. ACC_IS_PRESENT (H)) CALL ABORT
+
+!$ACC PARALLEL LOOP DEFAULT (PRESENT)
+      DO I = 1, N
+         H(I) = I + 1
+      END DO
+!$ACC END PARALLEL LOOP
+
+      DO I = 1, N
+         IF (H(I) .NE. I + MERGE (1, 0, SHARED_MEM)) CALL ABORT
+         H(I) = I + 2
+      END DO
+
+      CALL ACC_PRESENT_OR_CREATE (H)
+
+!$ACC PARALLEL LOOP DEFAULT (PRESENT)
+      DO I = 1, N
+         IF (H(I) .NE. I + MERGE (2, 1, SHARED_MEM)) CALL ABORT
+         H(I) = I + 3
+      END DO
+!$ACC END PARALLEL LOOP
+
+      DO I = 1, N
+         IF (H(I) .NE. I + MERGE (3, 2, SHARED_MEM)) CALL ABORT
+         H(I) = I + 4
+      END DO
+
+      CALL ACC_PCREATE (H)
+
+!$ACC PARALLEL LOOP DEFAULT (PRESENT)
+      DO I = 1, N
+         IF (H(I) .NE. I + MERGE (4, 3, SHARED_MEM)) CALL ABORT
+         H(I) = I + 5
+      END DO
+!$ACC END PARALLEL LOOP
+
+      DO I = 1, N
+         IF (H(I) .NE. I + MERGE (5, 4, SHARED_MEM)) CALL ABORT
+         H(I) = I + 6
+      END DO
+
+      CALL ACC_PRESENT_OR_COPYIN (H)
+
+!$ACC PARALLEL LOOP DEFAULT (PRESENT)
+      DO I = 1, N
+         IF (H(I) .NE. I + MERGE (6, 5, SHARED_MEM)) CALL ABORT
+         H(I) = I + 7
+      END DO
+!$ACC END PARALLEL LOOP
+
+      DO I = 1, N
+         IF (H(I) .NE. I + MERGE (7, 6, SHARED_MEM)) CALL ABORT
+         H(I) = I + 8
+      END DO
+
+      CALL ACC_PCOPYIN (H)
+
+!$ACC PARALLEL LOOP DEFAULT (PRESENT)
+      DO I = 1, N
+         IF (H(I) .NE. I + MERGE (8, 7, SHARED_MEM)) CALL ABORT
+         H(I) = I + 9
+      END DO
+!$ACC END PARALLEL LOOP
+
+      DO I = 1, N
+         IF (H(I) .NE. I + MERGE (9, 8, SHARED_MEM)) CALL ABORT
+         H(I) = I + 10
+      END DO
+
+      CALL ACC_COPYOUT (H)
+      IF (.NOT. SHARED_MEM) THEN
+         IF (ACC_IS_PRESENT (H)) CALL ABORT
+      ENDIF
+
+      DO I = 1, N
+         IF (H(I) .NE. I + MERGE (10, 9, SHARED_MEM)) CALL ABORT
+      END DO
+
+      CALL ACC_PCOPYIN (H)
+      IF (.NOT. ACC_IS_PRESENT (H)) CALL ABORT
+
+!$ACC PARALLEL LOOP DEFAULT (PRESENT)
+      DO I = 1, N
+         IF (H(I) .NE. I + MERGE (10, 9, SHARED_MEM)) CALL ABORT
+         H(I) = I + 11
+      END DO
+!$ACC END PARALLEL LOOP
+
+      DO I = 1, N
+         IF (H(I) .NE. I + MERGE (11, 9, SHARED_MEM)) CALL ABORT
+         H(I) = I + 12
+      END DO
+
+      CALL ACC_PCOPYIN (H)
+
+!$ACC PARALLEL LOOP DEFAULT (PRESENT)
+      DO I = 1, N
+         IF (H(I) .NE. I + MERGE (12, 11, SHARED_MEM)) CALL ABORT
+         H(I) = I + 13
+      END DO
+!$ACC END PARALLEL LOOP
+
+      DO I = 1, N
+         IF (H(I) .NE. I + MERGE (13, 12, SHARED_MEM)) CALL ABORT
+         H(I) = I + 14
+      END DO
+
+      CALL ACC_PCREATE (H)
+
+!$ACC PARALLEL LOOP DEFAULT (PRESENT)
+      DO I = 1, N
+         IF (H(I) .NE. I + MERGE (14, 13, SHARED_MEM)) CALL ABORT
+         H(I) = I + 15
+      END DO
+!$ACC END PARALLEL LOOP
+
+      DO I = 1, N
+         IF (H(I) .NE. I + MERGE (15, 14, SHARED_MEM)) CALL ABORT
+         H(I) = I + 16
+      END DO
+
+      CALL ACC_PCREATE (H)
+
+!$ACC PARALLEL LOOP DEFAULT (PRESENT)
+      DO I = 1, N
+         IF (H(I) .NE. I + MERGE (16, 15, SHARED_MEM)) CALL ABORT
+         H(I) = I + 17
+      END DO
+!$ACC END PARALLEL LOOP
+
+      DO I = 1, N
+         IF (H(I) .NE. I + MERGE (17, 16, SHARED_MEM)) CALL ABORT
+         H(I) = I + 18
+      END DO
+
+      CALL ACC_UPDATE_SELF (H)
+      IF (.NOT. ACC_IS_PRESENT (H)) CALL ABORT
+
+      DO I = 1, N
+         IF (H(I) .NE. I + MERGE (18, 17, SHARED_MEM)) CALL ABORT
+      END DO
+
+      CALL ACC_DELETE (H)
+      IF (.NOT. SHARED_MEM) THEN
+         IF (ACC_IS_PRESENT (H)) CALL ABORT
+      ENDIF
+
+      DEALLOCATE (H)
+
+      END PROGRAM MAIN