]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Allow matching Intel MIC in OpenMP 'declare variant'
authorThomas Schwinge <thomas@codesourcery.com>
Mon, 2 Aug 2021 15:38:05 +0000 (17:38 +0200)
committerThomas Schwinge <thomas@codesourcery.com>
Mon, 23 Aug 2021 15:45:40 +0000 (17:45 +0200)
..., 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 (ix86_omp_device_kind_arch_isa)
<omp_device_arch> [ACCEL_COMPILER]: Match "intel_mic".
* config/i386/t-omp-device (omp-device-properties-i386) <arch>:
Add "intel_mic".
libgomp/
* testsuite/lib/libgomp.exp
(check_effective_target_offload_target_intelmic): Remove 'proc'.
(check_effective_target_offload_device_intel_mic): New 'proc'.
* testsuite/libgomp.c-c++-common/on_device_arch.h
(device_arch_intel_mic, on_device_arch_intel_mic): New.
* testsuite/libgomp.c-c++-common/target-45.c: Use that for
'dg-xfail-run-if'.
* testsuite/libgomp.fortran/target10.f90: Likewise.

gcc/config/i386/i386-options.c
gcc/config/i386/t-omp-device
libgomp/testsuite/lib/libgomp.exp
libgomp/testsuite/libgomp.c-c++-common/on_device_arch.h
libgomp/testsuite/libgomp.c-c++-common/target-45.c
libgomp/testsuite/libgomp.fortran/target10.f90

index 6b789988baa42ac33793ff6965eb57010ee98e03..fee5a48c9a5072d750def54981da186810511081 100644 (file)
@@ -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)
index 037ae5e112d9d832ce733c6a5358a3439ec56a01..29350a1d80bc1575792d97a668beae60998294dd 100644 (file)
@@ -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'` >> $@
index ba8a73275c507d0d42148351ce0d2d2191e6dfb1..57fb6b068f306db52c31dbe5e4139d36f58bd3fc 100644 (file)
@@ -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 { } {
index 1c0753c318149cbd0384e2ec35a11321b2f29c8f..ee541dd226057453190df9f646c53f4b06b4764d 100644 (file)
@@ -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);
+}
index ec0d202e51cfdab164c8e84405539599c805e231..81acee810649d4caefe1077bbf3e4ae8d294f5a3 100644 (file)
@@ -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>
index 0b939ad7a0dcbbb3942dffb835171e6144f32efa..f41a726de75abd24ddea7e59d446020d17c3f29a 100644 (file)
@@ -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