]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
libgomp: Fix ipr_vendor for OpenMP's interop
authorTobias Burnus <tburnus@baylibre.com>
Wed, 27 May 2026 14:16:05 +0000 (16:16 +0200)
committerTobias Burnus <tburnus@baylibre.com>
Wed, 27 May 2026 14:16:05 +0000 (16:16 +0200)
omp_ipr_vendor and omp_ipr_vendor_name denote the vendor of the
implementation (GCC / GNU compiler) and not the vendor of the
foreign runtime (like Nvidia for CUDA or AMD for ROCm/HSA/HIP).

Thus, use 5 / "gnu" per "Additional Definitions" document
("1.2 Supported vendor-name Values"), cf.
https://www.openmp.org/specifications/

[See also OpenMP Spec Issue #4766.]

libgomp/ChangeLog:

* libgomp.texi (Foreign-runtime support for AMD GPUs,
Foreign-runtime support for Nvdia GPUs): Fix vendor
value to match compiler not GPU vendor.
* plugin/plugin-gcn.c (GOMP_OFFLOAD_get_interop_int,
GOMP_OFFLOAD_get_interop_str): Return 5/"gnu" as ipr_vendor.
* plugin/plugin-nvptx.c (GOMP_OFFLOAD_get_interop_int,
GOMP_OFFLOAD_get_interop_str): Likewise.
* testsuite/libgomp.c/append-args-fr.h: Updated expected
value.
* testsuite/libgomp.c/interop-cuda-full.c: Likewise.
* testsuite/libgomp.c/interop-fr-1.c: Likewise.
* testsuite/libgomp.c/interop-hip.h: Likewise.
* testsuite/libgomp.fortran/interop-hip.h: Likewise.

libgomp/libgomp.texi
libgomp/plugin/plugin-gcn.c
libgomp/plugin/plugin-nvptx.c
libgomp/testsuite/libgomp.c/append-args-fr.h
libgomp/testsuite/libgomp.c/interop-cuda-full.c
libgomp/testsuite/libgomp.c/interop-fr-1.c
libgomp/testsuite/libgomp.c/interop-hip.h
libgomp/testsuite/libgomp.fortran/interop-hip.h

index ab937e77b479b94f2ac6a9e554775fcfac463e1f..7bc313a6fabfddf7146a5b633bfbe00e8425e230 100644 (file)
@@ -7329,8 +7329,8 @@ Available properties for an HIP interop object:
 @headitem Property          @tab C data type             @tab API routine @tab value (if constant)
 @item @code{fr_id}          @tab @code{omp_interop_fr_t} @tab int         @tab @code{omp_fr_hip}
 @item @code{fr_name}        @tab @code{const char *}     @tab str         @tab @code{"hip"}
-@item @code{vendor}         @tab @code{int}              @tab int         @tab @code{1}
-@item @code{vendor_name}    @tab @code{const char *}     @tab str         @tab @code{"amd"}
+@item @code{vendor}         @tab @code{int}              @tab int         @tab @code{5}
+@item @code{vendor_name}    @tab @code{const char *}     @tab str         @tab @code{"gnu"}
 @item @code{device_num}     @tab @code{int}              @tab int         @tab
 @item @code{platform}       @tab N/A                     @tab             @tab
 @item @code{device}         @tab @code{hipDevice_t}      @tab int         @tab
@@ -7345,8 +7345,8 @@ Available properties for an HSA interop object:
 @headitem Property          @tab C data type             @tab API routine @tab value (if constant)
 @item @code{fr_id}          @tab @code{omp_interop_fr_t} @tab int         @tab @code{omp_fr_hsa}
 @item @code{fr_name}        @tab @code{const char *}     @tab str         @tab @code{"hsa"}
-@item @code{vendor}         @tab @code{int}              @tab int         @tab @code{1}
-@item @code{vendor_name}    @tab @code{const char *}     @tab str         @tab @code{"amd"}
+@item @code{vendor}         @tab @code{int}              @tab int         @tab @code{5}
+@item @code{vendor_name}    @tab @code{const char *}     @tab str         @tab @code{"gnu"}
 @item @code{device_num}     @tab @code{int}              @tab int         @tab
 @item @code{platform}       @tab N/A                     @tab             @tab
 @item @code{device}         @tab @code{hsa_agent *}      @tab ptr         @tab
@@ -7514,8 +7514,8 @@ Available properties for a CUDA runtime API interop object:
 @headitem Property          @tab C data type             @tab API routine @tab value (if constant)
 @item @code{fr_id}          @tab @code{omp_interop_fr_t} @tab int         @tab @code{omp_fr_cuda}
 @item @code{fr_name}        @tab @code{const char *}     @tab str         @tab @code{"cuda"}
-@item @code{vendor}         @tab @code{int}              @tab int         @tab @code{11}
-@item @code{vendor_name}    @tab @code{const char *}     @tab str         @tab @code{"nvidia"}
+@item @code{vendor}         @tab @code{int}              @tab int         @tab @code{5}
+@item @code{vendor_name}    @tab @code{const char *}     @tab str         @tab @code{"gnu"}
 @item @code{device_num}     @tab @code{int}              @tab int         @tab
 @item @code{platform}       @tab N/A                     @tab             @tab
 @item @code{device}         @tab @code{int}              @tab int         @tab
@@ -7530,8 +7530,8 @@ Available properties for a CUDA driver API interop object:
 @headitem Property          @tab C data type             @tab API routine @tab value (if constant)
 @item @code{fr_id}          @tab @code{omp_interop_fr_t} @tab int         @tab @code{omp_fr_cuda_driver}
 @item @code{fr_name}        @tab @code{const char *}     @tab str         @tab @code{"cuda_driver"}
-@item @code{vendor}         @tab @code{int}              @tab int         @tab @code{11}
-@item @code{vendor_name}    @tab @code{const char *}     @tab str         @tab @code{"nvidia"}
+@item @code{vendor}         @tab @code{int}              @tab int         @tab @code{5}
+@item @code{vendor_name}    @tab @code{const char *}     @tab str         @tab @code{"gnu"}
 @item @code{device_num}     @tab @code{int}              @tab int         @tab
 @item @code{platform}       @tab N/A                     @tab             @tab
 @item @code{device}         @tab @code{CUdevice}         @tab int         @tab
@@ -7546,8 +7546,8 @@ Available properties for an HIP interop object:
 @headitem Property          @tab C data type             @tab API routine @tab value (if constant)
 @item @code{fr_id}          @tab @code{omp_interop_fr_t} @tab int         @tab @code{omp_fr_hip}
 @item @code{fr_name}        @tab @code{const char *}     @tab str         @tab @code{"hip"}
-@item @code{vendor}         @tab @code{int}              @tab int         @tab @code{11}
-@item @code{vendor_name}    @tab @code{const char *}     @tab str         @tab @code{"nvidia"}
+@item @code{vendor}         @tab @code{int}              @tab int         @tab @code{5}
+@item @code{vendor_name}    @tab @code{const char *}     @tab str         @tab @code{"gnu"}
 @item @code{device_num}     @tab @code{int}              @tab int         @tab
 @item @code{platform}       @tab N/A                     @tab             @tab
 @item @code{device}         @tab @code{hipDevice_t}      @tab int         @tab
index 32f573f1b7f69836cb0d36f8cbebd5a35ed5843c..e47d8b2253b8e3a7f3043c79838b0068713e47a0 100644 (file)
@@ -4998,7 +4998,7 @@ GOMP_OFFLOAD_get_interop_int (struct interop_obj_t *obj,
     case omp_ipr_vendor:
       if (ret_code)
        *ret_code = omp_irc_success;
-      return 1; /* amd */
+      return 5; /* gnu */
     case omp_ipr_vendor_name:
       if (ret_code)
        *ret_code = omp_irc_type_str;
@@ -5166,7 +5166,7 @@ GOMP_OFFLOAD_get_interop_str (struct interop_obj_t *obj,
     case omp_ipr_vendor_name:
       if (ret_code)
        *ret_code = omp_irc_success;
-      return "amd";
+      return "gnu";
     case omp_ipr_device_num:
       if (ret_code)
        *ret_code = omp_irc_type_int;
index a540e9d4cce846637177021306f5cb96254b5fd4..e1c97a5fa2edf65b43d5694259cd93b24ca66385 100644 (file)
@@ -2748,7 +2748,7 @@ GOMP_OFFLOAD_get_interop_int (struct interop_obj_t *obj,
     case omp_ipr_vendor:
       if (ret_code)
        *ret_code = omp_irc_success;
-      return 11; /* nvidia */
+      return 5; /* gnu */
     case omp_ipr_vendor_name:
       if (ret_code)
        *ret_code = omp_irc_type_str;
@@ -2895,7 +2895,7 @@ GOMP_OFFLOAD_get_interop_str (struct interop_obj_t *obj,
     case omp_ipr_vendor_name:
       if (ret_code)
        *ret_code = omp_irc_success;
-      return "nvidia";
+      return "gnu";
     case omp_ipr_device_num:
       if (ret_code)
        *ret_code = omp_irc_type_int;
index 9f6ca04bbe9eed744eb0d3c0eba8a032b47c40ef..9c8c9d409f369fb5ff60e5ec0e19bcf4fe1e7b54 100644 (file)
@@ -102,12 +102,12 @@ check_nvptx (omp_interop_t obj, int dev, omp_interop_fr_t expected_fr, _Bool is_
   ret_code = omp_irc_no_value;
   int vendor = (int) omp_get_interop_int (obj, omp_ipr_vendor, &ret_code);
   assert (ret_code == omp_irc_success);
-  assert (vendor == 11);  /* Nvidia */
+  assert (vendor == 5);  /* gnu (= compiler vendor) */
 
   ret_code = omp_irc_no_value;
   const char *vendor_name = omp_get_interop_str (obj, omp_ipr_vendor_name, &ret_code);
   assert (ret_code == omp_irc_success);
-  assert (strcmp (vendor_name, "nvidia") == 0);
+  assert (strcmp (vendor_name, "gnu") == 0);
 
   ret_code = omp_irc_no_value;
   int dev_num = (int) omp_get_interop_int (obj, omp_ipr_device_num, &ret_code);
@@ -216,12 +216,12 @@ check_gcn (omp_interop_t obj, int dev, omp_interop_fr_t expected_fr, _Bool is_ta
   ret_code = omp_irc_no_value;
   int vendor = (int) omp_get_interop_int (obj, omp_ipr_vendor, &ret_code);
   assert (ret_code == omp_irc_success);
-  assert (vendor == 1);  /* Amd */
+  assert (vendor == 5);  /* gnu (= compiler vendor) */
 
   ret_code = omp_irc_no_value;
   const char *vendor_name = omp_get_interop_str (obj, omp_ipr_vendor_name, &ret_code);
   assert (ret_code == omp_irc_success);
-  assert (strcmp (vendor_name, "amd") == 0);
+  assert (strcmp (vendor_name, "gnu") == 0);
 
   ret_code = omp_irc_no_value;
   int dev_num = (int) omp_get_interop_int (obj, omp_ipr_device_num, &ret_code);
index c48a934978d90d59767dbd625f465dfc8a144a44..6d3c12b602a79e4a1a866858291dc2e66356ac7c 100644 (file)
@@ -74,11 +74,11 @@ main ()
 
   ivar = (int) omp_get_interop_int (obj_cuda, omp_ipr_vendor, &res);
   assert (res == omp_irc_success);
-  assert (ivar == 11);
+  assert (ivar == 5);  /* gnu (= compiler vendor) */
 
   ivar = (int) omp_get_interop_int (obj_cuda_driver, omp_ipr_vendor, &res);
   assert (res == omp_irc_success);
-  assert (ivar == 11);
+  assert (ivar == 5);  /* gnu (= compiler vendor) */
 
 
   /* Check whether the omp_ipr_device -> cudaDevice_t yields a valid device.  */
index 9310c95644ef6bf21fbc118ae5946b28b7f9daa2..5a139ac2a8afe05480f7f244d1b753639e9ea2cd 100644 (file)
@@ -271,12 +271,12 @@ check_nvptx (int dev)
       ret_code = omp_irc_no_value;
       int vendor = (int) omp_get_interop_int (obj, omp_ipr_vendor, &ret_code);
       assert (ret_code == omp_irc_success);
-      assert (vendor == 11);  /* Nvidia */
+      assert (vendor == 5);  /* gnu (= compiler vendor) */
 
       ret_code = omp_irc_no_value;
       const char *vendor_name = omp_get_interop_str (obj, omp_ipr_vendor_name, &ret_code);
       assert (ret_code == omp_irc_success);
-      assert (strcmp (vendor_name, "nvidia") == 0);
+      assert (strcmp (vendor_name, "gnu") == 0);
 
       ret_code = omp_irc_no_value;
       int dev_num = (int) omp_get_interop_int (obj, omp_ipr_device_num, &ret_code);
@@ -464,12 +464,12 @@ check_gcn (int dev)
       ret_code = omp_irc_no_value;
       int vendor = (int) omp_get_interop_int (obj, omp_ipr_vendor, &ret_code);
       assert (ret_code == omp_irc_success);
-      assert (vendor == 1);  /* Amd */
+      assert (vendor == 5);  /* gnu (= compiler vendor) */
 
       ret_code = omp_irc_no_value;
       const char *vendor_name = omp_get_interop_str (obj, omp_ipr_vendor_name, &ret_code);
       assert (ret_code == omp_irc_success);
-      assert (strcmp (vendor_name, "amd") == 0);
+      assert (strcmp (vendor_name, "gnu") == 0);
 
       ret_code = omp_irc_no_value;
       int dev_num = (int) omp_get_interop_int (obj, omp_ipr_device_num, &ret_code);
index 20a1ccb78fb215faac1a616fa63adb9695861353..a35bd1af67e6c13f1223d76ab5f6b3f7d3a7e4e3 100644 (file)
@@ -169,16 +169,15 @@ main ()
 
   ivar = (int) omp_get_interop_int (obj, omp_ipr_vendor, &res);
   assert (res == omp_irc_success);
-  int vendor_is_amd = ivar == 1;
+  assert (ivar == 5);  /* gnu (= compiler vendor) */
   #if defined(__HIP_PLATFORM_AMD__)
-    assert (ivar == 1);
+    bool device_vendor_is_amd = true;
   #elif defined(__HIP_PLATFORM_NVIDIA__)
-    assert (ivar == 11);
+    bool device_vendor_is_amd = false;
   #else
-    assert (0);
+    #error "Missing valid __HIP_PLATFORM_..."
   #endif
 
-
   /* Check whether the omp_ipr_device -> hipDevice_t yields a valid device.  */
 
   hipDevice_t hip_dev = (int) omp_get_interop_int (obj, omp_ipr_device, &res);
@@ -207,7 +206,7 @@ main ()
     hip_err = hipCtxGetApiVersion (hip_ctx, &ivar);
   #pragma GCC diagnostic pop
 
-  if (vendor_is_amd)
+  if (device_vendor_is_amd)
     assert (hip_err == hipErrorNotSupported && ivar == -99);
   else
     {
index 753ccce5fd7dc6cdc95836c92183fdadc0ed4e96..b22c7dec496201860b9c979b28b67e7fed5ba8a0 100644 (file)
@@ -120,17 +120,12 @@ program main
   if (fr /= omp_ifr_hip) error stop 1
 
   ivar = omp_get_interop_int (obj, omp_ipr_vendor, res)
-  if (ivar == 1) then  ! AMD
-    vendor_is_amd = .true.
-  else if (ivar == 11) then  ! Nvidia
-    vendor_is_amd = .false.
-  else
-    error stop 1  ! Unknown
-  endif
+  if (res /= omp_irc_success) error stop 1
+  if (ivar /= 5) error stop 1  ! gnu (= compiler vendor)
 #if USE_CUDA_NAMES
-  if (vendor_is_amd) error stop 1
+    vendor_is_amd = .false.
 #else
-  if (.not. vendor_is_amd) error stop 1
+    vendor_is_amd = .true.
 #endif
 
   ! Check whether the omp_ipr_device -> hipDevice_t yields a valid device.