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

Reply via email to