Hi, this patch avoids run-time failures in libgomp testsuite that curtrently happen when HSA offloading is actually used. All of them currently require the offload_device effective target which the patch changes to offload_device_nonshared_as one.
For some tests, such as libgomp.c/examples-4/device-1.c this is really the correct thing to do because the test explicitely checks that changes that happen in a target construct and are not mapped back are not observable on the host. However, the majority of the tests has a different problem. The test for some reason is not compiled into HSAIL (usually because it would require the dynamic parallelism path which is disabled or because it calls abort from within target which HSA so far cannot handle) and so the host fallback is called, even though the test actually is not supposed to be called on it. The tests then call omp_is_initial_device to verify they are not running on the host and decide to fail. Changing the effective target only to devices with non-shared memory probably isn't the really correct fix. We basically want to disable the host fallback for them regardeless of address spaces but I cannot think of a simple and generic way of doing that. However, all testcases for non-shared memory devices were written with disallowed fallback in mind and so this soulution also gives the desired result. Tested both with and without HSA (enabled or present). OK for trunk? Thanks, Martin 2016-02-12 Martin Jambor <mjam...@suse.cz> libgomp/ * testsuite/libgomp.c/examples-4/async_target-2.c: Only run on non-shared memory accelerators. * testsuite/libgomp.c/examples-4/device-1.c: Likewise. * testsuite/libgomp.c/examples-4/target-5.c: Likewise. * testsuite/libgomp.c/examples-4/target_data-6.c: Likewise. * testsuite/libgomp.c/examples-4/target_data-7.c: Likewise. * testsuite/libgomp.fortran/examples-4/async_target-2.f90: Likewise. * testsuite/libgomp.fortran/examples-4/device-1.f90: Likewise. * testsuite/libgomp.fortran/examples-4/target-5.f90: Likewise. * testsuite/libgomp.fortran/examples-4/target_data-6.f90: Likewise. * testsuite/libgomp.fortran/examples-4/target_data-7.f90: Likewise. --- libgomp/testsuite/libgomp.c/examples-4/async_target-2.c | 2 +- libgomp/testsuite/libgomp.c/examples-4/device-1.c | 2 +- libgomp/testsuite/libgomp.c/examples-4/target-5.c | 2 +- libgomp/testsuite/libgomp.c/examples-4/target_data-6.c | 2 +- libgomp/testsuite/libgomp.c/examples-4/target_data-7.c | 2 +- libgomp/testsuite/libgomp.fortran/examples-4/async_target-2.f90 | 2 +- libgomp/testsuite/libgomp.fortran/examples-4/device-1.f90 | 2 +- libgomp/testsuite/libgomp.fortran/examples-4/target-5.f90 | 2 +- libgomp/testsuite/libgomp.fortran/examples-4/target_data-6.f90 | 2 +- libgomp/testsuite/libgomp.fortran/examples-4/target_data-7.f90 | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/libgomp/testsuite/libgomp.c/examples-4/async_target-2.c b/libgomp/testsuite/libgomp.c/examples-4/async_target-2.c index ce63328..0c76f8e 100644 --- a/libgomp/testsuite/libgomp.c/examples-4/async_target-2.c +++ b/libgomp/testsuite/libgomp.c/examples-4/async_target-2.c @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-require-effective-target offload_device } */ +/* { dg-require-effective-target offload_device_nonshared_as } */ #include <omp.h> #include <stdlib.h> diff --git a/libgomp/testsuite/libgomp.c/examples-4/device-1.c b/libgomp/testsuite/libgomp.c/examples-4/device-1.c index dad8572..46aa160 100644 --- a/libgomp/testsuite/libgomp.c/examples-4/device-1.c +++ b/libgomp/testsuite/libgomp.c/examples-4/device-1.c @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-require-effective-target offload_device } */ +/* { dg-require-effective-target offload_device_nonshared_as } */ #include <omp.h> #include <stdlib.h> diff --git a/libgomp/testsuite/libgomp.c/examples-4/target-5.c b/libgomp/testsuite/libgomp.c/examples-4/target-5.c index 1853fba..1c14bae 100644 --- a/libgomp/testsuite/libgomp.c/examples-4/target-5.c +++ b/libgomp/testsuite/libgomp.c/examples-4/target-5.c @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-require-effective-target offload_device } */ +/* { dg-require-effective-target offload_device_nonshared_as } */ #include <omp.h> #include <stdlib.h> diff --git a/libgomp/testsuite/libgomp.c/examples-4/target_data-6.c b/libgomp/testsuite/libgomp.c/examples-4/target_data-6.c index affeb49..57c7c0c 100644 --- a/libgomp/testsuite/libgomp.c/examples-4/target_data-6.c +++ b/libgomp/testsuite/libgomp.c/examples-4/target_data-6.c @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-require-effective-target offload_device } */ +/* { dg-require-effective-target offload_device_nonshared_as } */ #include <stdlib.h> #include <omp.h> diff --git a/libgomp/testsuite/libgomp.c/examples-4/target_data-7.c b/libgomp/testsuite/libgomp.c/examples-4/target_data-7.c index c18d480..8ec41ea 100644 --- a/libgomp/testsuite/libgomp.c/examples-4/target_data-7.c +++ b/libgomp/testsuite/libgomp.c/examples-4/target_data-7.c @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-require-effective-target offload_device } */ +/* { dg-require-effective-target offload_device_nonshared_as } */ #include <stdlib.h> #include <omp.h> diff --git a/libgomp/testsuite/libgomp.fortran/examples-4/async_target-2.f90 b/libgomp/testsuite/libgomp.fortran/examples-4/async_target-2.f90 index f5eb05a..383d032 100644 --- a/libgomp/testsuite/libgomp.fortran/examples-4/async_target-2.f90 +++ b/libgomp/testsuite/libgomp.fortran/examples-4/async_target-2.f90 @@ -1,6 +1,6 @@ ! { dg-do run } ! { dg-additional-options "-Wno-hsa" } -! { dg-require-effective-target offload_device } +! { dg-require-effective-target offload_device_nonshared_as } subroutine init (v1, v2, N) !$omp declare target diff --git a/libgomp/testsuite/libgomp.fortran/examples-4/device-1.f90 b/libgomp/testsuite/libgomp.fortran/examples-4/device-1.f90 index 291604b..a411db4 100644 --- a/libgomp/testsuite/libgomp.fortran/examples-4/device-1.f90 +++ b/libgomp/testsuite/libgomp.fortran/examples-4/device-1.f90 @@ -1,5 +1,5 @@ ! { dg-do run } -! { dg-require-effective-target offload_device } +! { dg-require-effective-target offload_device_nonshared_as } program e_57_1 use omp_lib, only: omp_is_initial_device diff --git a/libgomp/testsuite/libgomp.fortran/examples-4/target-5.f90 b/libgomp/testsuite/libgomp.fortran/examples-4/target-5.f90 index 3f454d7..813a273 100644 --- a/libgomp/testsuite/libgomp.fortran/examples-4/target-5.f90 +++ b/libgomp/testsuite/libgomp.fortran/examples-4/target-5.f90 @@ -1,5 +1,5 @@ ! { dg-do run } -! { dg-require-effective-target offload_device } +! { dg-require-effective-target offload_device_nonshared_as } module e_50_5_mod integer, parameter :: THRESHOLD1 = 500, THRESHOLD2 = 100 diff --git a/libgomp/testsuite/libgomp.fortran/examples-4/target_data-6.f90 b/libgomp/testsuite/libgomp.fortran/examples-4/target_data-6.f90 index 258da21e..9b79104 100644 --- a/libgomp/testsuite/libgomp.fortran/examples-4/target_data-6.f90 +++ b/libgomp/testsuite/libgomp.fortran/examples-4/target_data-6.f90 @@ -1,5 +1,5 @@ ! { dg-do run } -! { dg-require-effective-target offload_device } +! { dg-require-effective-target offload_device_nonshared_as } module e_51_6_mod integer, parameter :: THRESHOLD = 500 diff --git a/libgomp/testsuite/libgomp.fortran/examples-4/target_data-7.f90 b/libgomp/testsuite/libgomp.fortran/examples-4/target_data-7.f90 index 2ddac9e..8fc5832 100644 --- a/libgomp/testsuite/libgomp.fortran/examples-4/target_data-7.f90 +++ b/libgomp/testsuite/libgomp.fortran/examples-4/target_data-7.f90 @@ -1,5 +1,5 @@ ! { dg-do run } -! { dg-require-effective-target offload_device } +! { dg-require-effective-target offload_device_nonshared_as } module e_51_7_mod integer, parameter :: THRESHOLD = 500 -- 2.7.1