Message ID | 92151547-dad5-c127-4cde-c9bbd27217f5@codesourcery.com |
---|---|
State | New |
Headers | show |
Series | libgomp/testsuite: Fix checks for dg-excess-errors | expand |
On Wed, Apr 21, 2021 at 07:04:17PM +0200, Tobias Burnus wrote: > OK for mainline and GCC 11? Ok for 12 and 11.2 (i.e. after 11.1 GA). > libgomp/testsuite: Fix checks for dg-excess-errors > > For the tests modified below, the effective target line has to be effective > when compiling for an offload target, except that variable-not-offloaded.c > would compile with unified-share memory and pr86416-*.c if long double/float128 > is supported. > The previous check used a run-time device ability check. This new variant > now enables those dg- lines when _compiling_ for nvptx or gcn. > > libgomp/ChangeLog: > > * testsuite/lib/libgomp.exp (offload_target_to_openacc_device_type): > New, based on check_effective_target_offload_target_nvptx. > (check_effective_target_offload_target_nvptx): Call it. > (check_effective_target_offload_target_amdgcn): New. > * testsuite/libgomp.c-c++-common/function-not-offloaded.c: > Require target offload_target_nvptx || offload_target_amdgcn. > * testsuite/libgomp.c-c++-common/variable-not-offloaded.c: Likewise. > * testsuite/libgomp.c/pr86416-1.c: Likewise. > * testsuite/libgomp.c/pr86416-2.c: Likewise. Jakub
On Wed, 21 Apr 2021, Tobias Burnus wrote: > This was brought up by Richard when testing libgomp with the GCC 11 > distribution > compiler, which has both nvptx and gcn enabled – but no offloading device was > available. > > This lead to fails for: > * testsuite/libgomp.c-c++-common/function-not-offloaded.c: > → function (on purpose) not marked for offline > → issue: dg-excess-errors by lto1/mkoffload not ignored > * testsuite/libgomp.c-c++-common/variable-not-offloaded.c > → likewise for variables, except that this would succeed > with unified-shared memory > → issue: dg-excess-errors by lto1/mkoffload not ignored > * libgomp/testsuite/libgomp.c/pr86416-1.c + *-2.c > → expected fail when offloading compiler does not support > long double or float128 > → issue: error output but dg-error/dg-excess-error not active > > The reason for those fails is that used effective target checks > do not cover those cases correctly. Namely: > > * offload_device - check whether an offloading device is > available & used at run time. > → problem: compilation was done for the device but here > no device is available > * offload_device_nonshared_as > → Likewise and same issue, except that also 0 is returned > if the device has unified shared memory. > > Solution: Explicitly check for nvptx/gcn offload compilation > (but ignore device availability). > [Uses 'gcc -v |grep ^OFFLOAD_TARGET_NAMES=', which honors > -foffload=, including -foffload=disable.] > > OK for mainline and GCC 11? > > > Tested without offloading support & with nvptx & > offload support (with an offloading device available). > > @Richard: I would be happy if you could confirm that this fixes > your issue. So with this I'm down to === libgomp tests === Running target unix XPASS: libgomp.c/../libgomp.c-c++-common/pr96390.c (test for excess errors) FAIL: libgomp.c/target-28.c (test for excess errors) UNRESOLVED: libgomp.c/target-28.c compilation failed to produce executable XPASS: libgomp.c++/../libgomp.c-c++-common/pr96390.c (test for excess errors) XPASS: libgomp.c++/pr96390.C (test for excess errors) FAIL: libgomp.c++/target-13.C (test for excess errors) UNRESOLVED: libgomp.c++/target-13.C compilation failed to produce executable === libgomp Summary === # of expected passes 8411 # of unexpected failures 2 # of unexpected successes 3 which is nice. The target-28.c FAIL is spawn -ignore SIGHUP /home/abuild/rpmbuild/BUILD/gcc-11.0.1+git10/obj-x86_64-suse-linux/./gcc/xgcc -B/home/abuild/rpmbuild/BUILD/gcc-11.0.1+git10/obj-x86_64-suse-linux/./gcc/ -B/usr/x86_64-suse-linux/bin/ -B/usr/x86_64-suse-linux/lib/ -isystem /usr/x86_64-suse-linux/include -isystem /usr/x86_64-suse-linux/sys-include -fchecking=1 ../../../../libgomp/testsuite/libgomp.c/target-28.c -B/home/abuild/rpmbuild/BUILD/gcc-11.0.1+git10/obj-x86_64-suse-linux/x86_64-suse-linux/./libgomp/ -B/home/abuild/rpmbuild/BUILD/gcc-11.0.1+git10/obj-x86_64-suse-linux/x86_64-suse-linux/./libgomp/.libs -I/home/abuild/rpmbuild/BUILD/gcc-11.0.1+git10/obj-x86_64-suse-linux/x86_64-suse-linux/./libgomp -I../../../../libgomp/testsuite/../../include -I../../../../libgomp/testsuite/.. -Lno -fmessage-length=0 -fno-diagnostics-show-caret -fdiagnostics-color=never -B/usr/lib64/gcc/x86_64-suse-linux/11 -B/usr/bin -B/usr/lib64/gcc/x86_64-suse-linux/11 -B/usr/bin -fopenmp -O2 -L/home/abuild/rpmbuild/BUILD/gcc-11.0.1+git10/obj-x86_64-suse-linux/x86_64-suse-linux/./libgomp/.libs -lm -o ./target-28.exe^M ^[[1m/tmp/ccCLBCvn.mkoffload.2.s:233:2: ^[[0m^[[0;1;31merror: ^[[0m^[[1ms.3 changed binding to STB_GLOBAL^M ^[[0m .global s.3^M ^[[0;1;32m ^^M ^[[0m^[[1m/tmp/ccCLBCvn.mkoffload.2.s:234:2: ^[[0m^[[0;1;31merror: ^[[0m^[[1ms.2 changed binding to STB_GLOBAL^M ^[[0m .global s.2^M ^[[0;1;32m ^^M ^[[0mmkoffload: fatal error: /usr/bin//x86_64-suse-linux-accel-amdgcn-amdhsa-gcc-11 returned 1 exit status^M compilation terminated.^M lto-wrapper: fatal error: /usr/lib64/gcc/x86_64-suse-linux/11//accel/amdgcn-amdhsa/mkoffload returned 1 exit status^M and the target-13.C one is similar. Richard.
libgomp/testsuite: Fix checks for dg-excess-errors For the tests modified below, the effective target line has to be effective when compiling for an offload target, except that variable-not-offloaded.c would compile with unified-share memory and pr86416-*.c if long double/float128 is supported. The previous check used a run-time device ability check. This new variant now enables those dg- lines when _compiling_ for nvptx or gcn. libgomp/ChangeLog: * testsuite/lib/libgomp.exp (offload_target_to_openacc_device_type): New, based on check_effective_target_offload_target_nvptx. (check_effective_target_offload_target_nvptx): Call it. (check_effective_target_offload_target_amdgcn): New. * testsuite/libgomp.c-c++-common/function-not-offloaded.c: Require target offload_target_nvptx || offload_target_amdgcn. * testsuite/libgomp.c-c++-common/variable-not-offloaded.c: Likewise. * testsuite/libgomp.c/pr86416-1.c: Likewise. * testsuite/libgomp.c/pr86416-2.c: Likewise. libgomp/testsuite/lib/libgomp.exp | 20 ++++++++++++++++---- .../libgomp.c-c++-common/function-not-offloaded.c | 2 +- .../libgomp.c-c++-common/variable-not-offloaded.c | 4 ++-- libgomp/testsuite/libgomp.c/pr86416-1.c | 4 ++-- libgomp/testsuite/libgomp.c/pr86416-2.c | 4 ++-- 5 files changed, 23 insertions(+), 11 deletions(-) diff --git a/libgomp/testsuite/lib/libgomp.exp b/libgomp/testsuite/lib/libgomp.exp index 14dcfdfd00a..467cb3cf255 100644 --- a/libgomp/testsuite/lib/libgomp.exp +++ b/libgomp/testsuite/lib/libgomp.exp @@ -340,8 +340,10 @@ proc offload_target_to_openacc_device_type { offload_target } { } } -# Return 1 if compiling for offload target nvptx. -proc check_effective_target_offload_target_nvptx { } { +# Return 1 if compiling for the specified offload target +# Takes -foffload=... into account by checking OFFLOAD_TARGET_NAMES= +# in the -v compiler output. +proc libgomp_check_effective_target_offload_target { target_name } { # Consider all actual options, including the flags passed to # 'gcc-dg-runtest', or 'gfortran-dg-runtest' (see the 'libgomp.*/*.exp' # files; in particular, '-foffload', 'libgomp.oacc-*/*.exp'), which don't @@ -354,13 +356,23 @@ proc check_effective_target_offload_target_nvptx { } { set gcc_output [libgomp_target_compile "" "" "none" $options] if [regexp "(?n)^OFFLOAD_TARGET_NAMES=(.*)" $gcc_output dummy offload_targets] { verbose "compiling for offload targets: $offload_targets" - return [string match "*:nvptx*:*" ":$offload_targets:"] + return [string match "*:$target_name*:*" ":$offload_targets:"] } - verbose "not compiling for any offload targets" + verbose "not compiling for $target_name offload target" return 0 } +# Return 1 if compiling for offload target nvptx. +proc check_effective_target_offload_target_nvptx { } { + return [libgomp_check_effective_target_offload_target "nvptx"] +} + +# Return 1 if compiling for offload target amdgcn +proc check_effective_target_offload_target_amdgcn { } { + return [libgomp_check_effective_target_offload_target "amdgcn"] +} + # Return 1 if offload device is available. proc check_effective_target_offload_device { } { return [check_runtime_nocache offload_device_available_ { diff --git a/libgomp/testsuite/libgomp.c-c++-common/function-not-offloaded.c b/libgomp/testsuite/libgomp.c-c++-common/function-not-offloaded.c index 9e59ef8864e..bc1ae68941a 100644 --- a/libgomp/testsuite/libgomp.c-c++-common/function-not-offloaded.c +++ b/libgomp/testsuite/libgomp.c-c++-common/function-not-offloaded.c @@ -1,5 +1,5 @@ /* { dg-do link } */ -/* { dg-excess-errors "unresolved symbol foo, lto1, mkoffload and lto-wrapper fatal errors" { target offload_device_nonshared_as } } */ +/* { dg-excess-errors "unresolved symbol foo, lto1, mkoffload and lto-wrapper fatal errors" { target { offload_target_nvptx || offload_target_amdgcn } } } */ /* { dg-additional-sources "function-not-offloaded-aux.c" } */ #pragma omp declare target diff --git a/libgomp/testsuite/libgomp.c-c++-common/variable-not-offloaded.c b/libgomp/testsuite/libgomp.c-c++-common/variable-not-offloaded.c index bc4b916e9a4..fe2a8b26242 100644 --- a/libgomp/testsuite/libgomp.c-c++-common/variable-not-offloaded.c +++ b/libgomp/testsuite/libgomp.c-c++-common/variable-not-offloaded.c @@ -1,7 +1,7 @@ /* { dg-do link } */ -/* { dg-excess-errors "lto1, mkoffload and lto-wrapper fatal errors" { target offload_device_nonshared_as } } */ +/* { dg-excess-errors "lto1, mkoffload and lto-wrapper fatal errors" { target { offload_target_nvptx || offload_target_amdgcn } } } */ -int var; /* { dg-error "variable 'var' has been referenced in offloaded code but hasn't been marked to be included in the offloaded code" "" { target offload_device_nonshared_as } } */ +int var; /* { dg-error "variable 'var' has been referenced in offloaded code but hasn't been marked to be included in the offloaded code" "" { target { offload_target_nvptx || offload_target_amdgcn } } } */ #pragma omp declare target void __attribute__((noinline, noclone)) diff --git a/libgomp/testsuite/libgomp.c/pr86416-1.c b/libgomp/testsuite/libgomp.c/pr86416-1.c index ad9370f78f3..6d3869264fd 100644 --- a/libgomp/testsuite/libgomp.c/pr86416-1.c +++ b/libgomp/testsuite/libgomp.c/pr86416-1.c @@ -2,8 +2,8 @@ /* { dg-require-effective-target large_long_double } */ /* PR middle-end/86416 */ -/* { dg-error "bit-precision floating-point numbers unsupported .mode '.F'." "" { target offload_device } 0 } */ -/* { dg-excess-errors "Follow-up errors from mkoffload and lto-wrapper" { target offload_device } } */ +/* { dg-error "bit-precision floating-point numbers unsupported .mode '.F'." "" { target { offload_target_nvptx || offload_target_amdgcn } } 0 } */ +/* { dg-excess-errors "Follow-up errors from mkoffload and lto-wrapper" { target { offload_target_nvptx || offload_target_amdgcn } } } */ #include <stdlib.h> /* For abort. */ diff --git a/libgomp/testsuite/libgomp.c/pr86416-2.c b/libgomp/testsuite/libgomp.c/pr86416-2.c index ec45e400f95..cffeb3f7107 100644 --- a/libgomp/testsuite/libgomp.c/pr86416-2.c +++ b/libgomp/testsuite/libgomp.c/pr86416-2.c @@ -2,8 +2,8 @@ /* { dg-add-options __float128 } */ /* PR middle-end/86416 */ -/* { dg-error "bit-precision floating-point numbers unsupported .mode '.F'." "" { target offload_device } 0 } */ -/* { dg-excess-errors "Follow-up errors from mkoffload and lto-wrapper" { target offload_device } } */ +/* { dg-error "bit-precision floating-point numbers unsupported .mode '.F'." "" { target { offload_target_nvptx || offload_target_amdgcn } } 0 } */ +/* { dg-excess-errors "Follow-up errors from mkoffload and lto-wrapper" { target { offload_target_nvptx || offload_target_amdgcn } } } */ #include <stdlib.h> /* For abort. */