aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Burnus <tobias@codesourcery.com>2023-06-07 13:22:13 +0200
committerTobias Burnus <tobias@codesourcery.com>2023-06-07 13:23:30 +0200
commitdd958667821e38b7d6b8efe448044901b4762b3a (patch)
treeb7f44b6849a725e003d7dc95aa95a601dd90352e
parent5faaabef3819434d13fcbf749bd07bfc98ca7c3c (diff)
downloadgcc-dd958667821e38b7d6b8efe448044901b4762b3a.zip
gcc-dd958667821e38b7d6b8efe448044901b4762b3a.tar.gz
gcc-dd958667821e38b7d6b8efe448044901b4762b3a.tar.bz2
testsuite/libgomp.*/target-present-*.{c,f90}: Improve and fix
One of the testcases lacked variables in a map clause such that the fail occurred too early. Additionally, it would have failed for all those non-host devices where 'present' is always true, i.e. non-host devices which can access all of the host memory (shared-memory devices). [There are currently none.] The commit now runs the code on all devices, which should succeed for host fallback and for shared-memory devices, finding potenial issues that way. Additionally, a checkpoint (required stdout output) is used to ensure that the execution won't fail (with the same error) before reaching the expected fail location. 2023-06-07 Thomas Schwinge <thomas@codesourcery.com> Tobias Burnus <tobias@codesourcery.com> libgomp/ * testsuite/libgomp.c-c++-common/target-present-1.c: Run code also for non-offload_device targets; check that it runs successfully for those and for all until a checkpoint for all * testsuite/libgomp.c-c++-common/target-present-2.c: Likewise. * testsuite/libgomp.c-c++-common/target-present-3.c: Likewise. * testsuite/libgomp.fortran/target-present-1.f90: Likewise. * testsuite/libgomp.fortran/target-present-3.f90: Likewise. * testsuite/libgomp.fortran/target-present-2.f90: Likewise; add missing vars to map clause.
-rw-r--r--libgomp/testsuite/libgomp.c-c++-common/target-present-1.c9
-rw-r--r--libgomp/testsuite/libgomp.c-c++-common/target-present-2.c11
-rw-r--r--libgomp/testsuite/libgomp.c-c++-common/target-present-3.c9
-rw-r--r--libgomp/testsuite/libgomp.fortran/target-present-1.f909
-rw-r--r--libgomp/testsuite/libgomp.fortran/target-present-2.f9013
-rw-r--r--libgomp/testsuite/libgomp.fortran/target-present-3.f909
6 files changed, 35 insertions, 25 deletions
diff --git a/libgomp/testsuite/libgomp.c-c++-common/target-present-1.c b/libgomp/testsuite/libgomp.c-c++-common/target-present-1.c
index 12f154c..aa34319 100644
--- a/libgomp/testsuite/libgomp.c-c++-common/target-present-1.c
+++ b/libgomp/testsuite/libgomp.c-c++-common/target-present-1.c
@@ -1,5 +1,4 @@
-/* { dg-do run { target offload_device } } */
-/* { dg-shouldfail "present error triggered" } */
+#include <stdio.h>
#define N 100
@@ -18,8 +17,12 @@ int main (void)
for (int i = 0; i < N; i++)
c[i] = a[i];
+ fprintf (stderr, "CheCKpOInT\n");
+ /* { dg-output "CheCKpOInT(\n|\r\n|\r).*" } */
+
/* b has not been allocated, so this should result in an error. */
- /* { dg-output "libgomp: present clause: not present on the device \\\(0x\[0-9a-f\]+, \[0-9\]+\\\)" } */
+ /* { dg-output "libgomp: present clause: not present on the device \\\(0x\[0-9a-f\]+, \[0-9\]+\\\)" { target offload_device_nonshared_as } } */
+ /* { dg-shouldfail "present error triggered" { offload_device_nonshared_as } } */
#pragma omp target map (present, to: b)
for (int i = 0; i < N; i++)
c[i] += b[i];
diff --git a/libgomp/testsuite/libgomp.c-c++-common/target-present-2.c b/libgomp/testsuite/libgomp.c-c++-common/target-present-2.c
index d4debba..ad11023 100644
--- a/libgomp/testsuite/libgomp.c-c++-common/target-present-2.c
+++ b/libgomp/testsuite/libgomp.c-c++-common/target-present-2.c
@@ -1,5 +1,4 @@
-/* { dg-do run { target offload_device } } */
-/* { dg-shouldfail "present error triggered" } */
+#include <stdio.h>
#define N 100
@@ -13,13 +12,17 @@ int main (void)
}
#pragma omp target enter data map (alloc: a, c)
- /* a has already been allocated, so this should be okay. */
+ /* a and c have already been allocated, so this should be okay. */
#pragma omp target defaultmap (present)
for (int i = 0; i < N; i++)
c[i] = a[i];
+ fprintf (stderr, "CheCKpOInT\n");
+ /* { dg-output "CheCKpOInT(\n|\r\n|\r).*" } */
+
/* b has not been allocated, so this should result in an error. */
- /* { dg-output "libgomp: present clause: not present on the device \\\(0x\[0-9a-f\]+, \[0-9\]+\\\)" } */
+ /* { dg-output "libgomp: present clause: not present on the device \\\(0x\[0-9a-f\]+, \[0-9\]+\\\)" { target offload_device_nonshared_as } } */
+ /* { dg-shouldfail "present error triggered" { offload_device_nonshared_as } } */
#pragma omp target defaultmap (present)
for (int i = 0; i < N; i++)
c[i] += b[i];
diff --git a/libgomp/testsuite/libgomp.c-c++-common/target-present-3.c b/libgomp/testsuite/libgomp.c-c++-common/target-present-3.c
index 9d8d8f8..455519a 100644
--- a/libgomp/testsuite/libgomp.c-c++-common/target-present-3.c
+++ b/libgomp/testsuite/libgomp.c-c++-common/target-present-3.c
@@ -1,6 +1,3 @@
-/* { dg-do run { target offload_device } } */
-/* { dg-shouldfail "present error triggered" } */
-
#include <stdio.h>
#define N 100
@@ -19,8 +16,12 @@ int main (void)
/* This should work as a has already been allocated. */
#pragma omp target update to (present: a)
+ fprintf (stderr, "CheCKpOInT\n");
+ /* { dg-output "CheCKpOInT(\n|\r\n|\r).*" } */
+
/* This should fail as b has not been allocated. */
- /* { dg-output "libgomp: present clause: not present on the device \\\(0x\[0-9a-f\]+, \[0-9\]+\\\)" } */
+ /* { dg-output "libgomp: present clause: not present on the device \\\(0x\[0-9a-f\]+, \[0-9\]+\\\)" { target offload_device_nonshared_as } } */
+ /* { dg-shouldfail "present error triggered" { offload_device_nonshared_as } } */
#pragma omp target update to (present: b)
#pragma omp target exit data map (from: c)
diff --git a/libgomp/testsuite/libgomp.fortran/target-present-1.f90 b/libgomp/testsuite/libgomp.fortran/target-present-1.f90
index 349dcb1..768166f 100644
--- a/libgomp/testsuite/libgomp.fortran/target-present-1.f90
+++ b/libgomp/testsuite/libgomp.fortran/target-present-1.f90
@@ -1,6 +1,3 @@
-! { dg-do run { target offload_device } }
-! { dg-shouldfail "present error triggered" }
-
program main
implicit none
integer, parameter :: N = 100
@@ -19,8 +16,12 @@ program main
end do
!$omp end target
+ print *, "CheCKpOInT"
+ ! { dg-output "CheCKpOInT(\n|\r\n|\r).*" }
+
! b has not been allocated, so this should result in an error.
- ! { dg-output "libgomp: present clause: not present on the device \\\(0x\[0-9a-f\]+, \[0-9\]+\\\)" }
+ ! { dg-output "libgomp: present clause: not present on the device \\\(0x\[0-9a-f\]+, \[0-9\]+\\\)" { target offload_device_nonshared_as } }
+ ! { dg-shouldfail "present error triggered" { offload_device_nonshared_as } }
!$omp target map (present, to: b)
do i = 1, N
c(i) = c(i) + b(i)
diff --git a/libgomp/testsuite/libgomp.fortran/target-present-2.f90 b/libgomp/testsuite/libgomp.fortran/target-present-2.f90
index 07e79d1..8f2c24e 100644
--- a/libgomp/testsuite/libgomp.fortran/target-present-2.f90
+++ b/libgomp/testsuite/libgomp.fortran/target-present-2.f90
@@ -1,6 +1,3 @@
-! { dg-do run { target offload_device } }
-! { dg-shouldfail "present error triggered" }
-
program main
implicit none
integer, parameter :: N = 100
@@ -11,16 +8,20 @@ program main
b(i) = i * 3 + 1
end do
- !$omp target enter data map (alloc: a)
- ! a has already been allocated, so this should be okay.
+ !$omp target enter data map (alloc: a, c, i)
+ ! a, c, and i have already been allocated, so this should be okay.
!$omp target defaultmap (present)
do i = 1, N
c(i) = a(i)
end do
!$omp end target
+ print *, "CheCKpOInT"
+ ! { dg-output "CheCKpOInT(\n|\r\n|\r).*" }
+
! b has not been allocated, so this should result in an error.
- ! { dg-output "libgomp: present clause: not present on the device \\\(0x\[0-9a-f\]+, \[0-9\]+\\\)" }
+ ! { dg-output "libgomp: present clause: not present on the device \\\(0x\[0-9a-f\]+, \[0-9\]+\\\)" { target offload_device_nonshared_as } }
+ ! { dg-shouldfail "present error triggered" { offload_device_nonshared_as } }
!$omp target defaultmap (present)
do i = 1, N
c(i) = c(i) + b(i)
diff --git a/libgomp/testsuite/libgomp.fortran/target-present-3.f90 b/libgomp/testsuite/libgomp.fortran/target-present-3.f90
index a2709eb..eb29c90 100644
--- a/libgomp/testsuite/libgomp.fortran/target-present-3.f90
+++ b/libgomp/testsuite/libgomp.fortran/target-present-3.f90
@@ -1,6 +1,3 @@
-! { dg-do run { target offload_device } }
-! { dg-shouldfail "present error triggered" }
-
program main
implicit none
integer, parameter :: N = 100
@@ -15,8 +12,12 @@ program main
! This should work as a has already been allocated.
!$omp target update to (present: a)
+ print *, "CheCKpOInT"
+ ! { dg-output "CheCKpOInT(\n|\r\n|\r).*" }
+
! This should fail as b has not been allocated.
- ! { dg-output "libgomp: present clause: not present on the device \\\(0x\[0-9a-f\]+, \[0-9\]+\\\)" }
+ ! { dg-output "libgomp: present clause: not present on the device \\\(0x\[0-9a-f\]+, \[0-9\]+\\\)" { target offload_device_nonshared_as } }
+ ! { dg-shouldfail "present error triggered" { offload_device_nonshared_as } }
!$omp target update to (present: b)
!$omp target exit data map (from: c)
end program