diff options
author | Tobias Burnus <tobias@codesourcery.com> | 2023-06-07 13:22:13 +0200 |
---|---|---|
committer | Tobias Burnus <tobias@codesourcery.com> | 2023-06-07 13:23:30 +0200 |
commit | dd958667821e38b7d6b8efe448044901b4762b3a (patch) | |
tree | b7f44b6849a725e003d7dc95aa95a601dd90352e | |
parent | 5faaabef3819434d13fcbf749bd07bfc98ca7c3c (diff) | |
download | gcc-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.
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 |