On Mon, Aug 23, 2021 at 04:58:43PM +0200, Thomas Schwinge wrote: > Hi! > > See the attached "Allow matching Intel MIC in OpenMP 'declare variant'". > OK to push, or how should this be done better?
LGTM. > >From 33e5efd0b9c4b1a0712b3dbe103e3a295c765ab4 Mon Sep 17 00:00:00 2001 > From: Thomas Schwinge <tho...@codesourcery.com> > Date: Mon, 2 Aug 2021 17:38:05 +0200 > Subject: [PATCH] Allow matching Intel MIC in OpenMP 'declare variant' > > ..., and use that to improve XFAILing for Intel MIC offloading execution > instead of compilation in 'libgomp.c-c++-common/target-45.c', > 'libgomp.fortran/target10.f90'. > --- > gcc/config/i386/i386-options.c | 4 ++++ > gcc/config/i386/t-omp-device | 2 +- > libgomp/testsuite/lib/libgomp.exp | 17 ++++++++++++----- > .../libgomp.c-c++-common/on_device_arch.h | 13 +++++++++++++ > .../testsuite/libgomp.c-c++-common/target-45.c | 2 +- > libgomp/testsuite/libgomp.fortran/target10.f90 | 3 ++- > 6 files changed, 33 insertions(+), 8 deletions(-) > > diff --git a/gcc/config/i386/i386-options.c b/gcc/config/i386/i386-options.c > index 6b789988baa..fee5a48c9a5 100644 > --- a/gcc/config/i386/i386-options.c > +++ b/gcc/config/i386/i386-options.c > @@ -304,6 +304,10 @@ ix86_omp_device_kind_arch_isa (enum > omp_device_kind_arch_isa trait, > case omp_device_kind: > return strcmp (name, "cpu") == 0; > case omp_device_arch: > +#ifdef ACCEL_COMPILER > + if (strcmp (name, "intel_mic") == 0) > + return 1; > +#endif > if (strcmp (name, "x86") == 0) > return 1; > if (TARGET_64BIT) > diff --git a/gcc/config/i386/t-omp-device b/gcc/config/i386/t-omp-device > index 037ae5e112d..29350a1d80b 100644 > --- a/gcc/config/i386/t-omp-device > +++ b/gcc/config/i386/t-omp-device > @@ -1,6 +1,6 @@ > omp-device-properties-i386: $(srcdir)/config/i386/i386-options.c > echo kind: cpu > $@ > - echo arch: x86 x86_64 i386 i486 i586 i686 ia32 >> $@ > + echo arch: intel_mic x86 x86_64 i386 i486 i586 i686 ia32 >> $@ > echo isa: sse4 `sed -n '/^static struct ix86_target_opts > isa2\?_opts\[\] =/,/^};/p' \ > $(srcdir)/config/i386/i386-options.c | \ > sed -n 's/",.*$$//;s/^ { "-m//p'` >> $@ > diff --git a/libgomp/testsuite/lib/libgomp.exp > b/libgomp/testsuite/lib/libgomp.exp > index ba8a73275c5..57fb6b068f3 100644 > --- a/libgomp/testsuite/lib/libgomp.exp > +++ b/libgomp/testsuite/lib/libgomp.exp > @@ -374,11 +374,6 @@ proc check_effective_target_offload_target_amdgcn { } { > return [libgomp_check_effective_target_offload_target "amdgcn"] > } > > -# Return 1 if compiling for offload target intelmic > -proc check_effective_target_offload_target_intelmic { } { > - return [libgomp_check_effective_target_offload_target "*-intelmic"] > -} > - > # Return 1 if offload device is available. > proc check_effective_target_offload_device { } { > return [check_runtime_nocache offload_device_available_ { > @@ -453,6 +448,18 @@ proc > check_effective_target_openacc_nvidia_accel_selected { } { > return [string match "nvidia" $openacc_device_type] > } > > +# Return 1 if using Intel MIC offload device. > +proc check_effective_target_offload_device_intel_mic { } { > + return [check_runtime_nocache offload_device_intel_mic { > + #include <omp.h> > + #include "testsuite/libgomp.c-c++-common/on_device_arch.h" > + int main () > + { > + return !on_device_arch_intel_mic (); > + } > + } ] > +} > + > # Return 1 if the OpenACC 'host' device type is selected. > > proc check_effective_target_openacc_host_selected { } { > diff --git a/libgomp/testsuite/libgomp.c-c++-common/on_device_arch.h > b/libgomp/testsuite/libgomp.c-c++-common/on_device_arch.h > index 1c0753c3181..ee541dd2260 100644 > --- a/libgomp/testsuite/libgomp.c-c++-common/on_device_arch.h > +++ b/libgomp/testsuite/libgomp.c-c++-common/on_device_arch.h > @@ -6,7 +6,14 @@ device_arch_nvptx (void) > return GOMP_DEVICE_NVIDIA_PTX; > } > > +/* static */ int > +device_arch_intel_mic (void) > +{ > + return GOMP_DEVICE_INTEL_MIC; > +} > + > #pragma omp declare variant (device_arch_nvptx) > match(construct={target},device={arch(nvptx)}) > +#pragma omp declare variant (device_arch_intel_mic) > match(construct={target},device={arch(intel_mic)}) > /* static */ int > device_arch (void) > { > @@ -28,3 +35,9 @@ on_device_arch_nvptx () > { > return on_device_arch (GOMP_DEVICE_NVIDIA_PTX); > } > + > +int > +on_device_arch_intel_mic () > +{ > + return on_device_arch (GOMP_DEVICE_INTEL_MIC); > +} > diff --git a/libgomp/testsuite/libgomp.c-c++-common/target-45.c > b/libgomp/testsuite/libgomp.c-c++-common/target-45.c > index ec0d202e51c..81acee81064 100644 > --- a/libgomp/testsuite/libgomp.c-c++-common/target-45.c > +++ b/libgomp/testsuite/libgomp.c-c++-common/target-45.c > @@ -1,4 +1,4 @@ > -/* { dg-do run { target { ! offload_target_intelmic } } } */ > +/* { dg-xfail-run-if TODO { offload_device_intel_mic } } */ > > #include <omp.h> > #include <stdlib.h> > diff --git a/libgomp/testsuite/libgomp.fortran/target10.f90 > b/libgomp/testsuite/libgomp.fortran/target10.f90 > index 0b939ad7a0d..f41a726de75 100644 > --- a/libgomp/testsuite/libgomp.fortran/target10.f90 > +++ b/libgomp/testsuite/libgomp.fortran/target10.f90 > @@ -1,4 +1,5 @@ > -! { dg-do run { target { ! offload_target_intelmic } } } > +! { dg-do run } > +! { dg-xfail-run-if TODO { offload_device_intel_mic } } > > program main > use omp_lib > -- > 2.25.1 > Jakub