[flang-commits] [flang] [llvm] [openmp] [OpenMP][Flang] Add integer-kind wrappers to omp_lib (PR #213505)
via flang-commits
flang-commits at lists.llvm.org
Sat Aug 1 22:00:51 PDT 2026
https://github.com/shivaramaarao created https://github.com/llvm/llvm-project/pull/213505
Many OpenMP routines in omp_lib currently accept only integer(kind=omp_integer_kind) arguments, where omp_integer_kind maps to c_int. As a result, Flang's type checking rejects calls that pass integer(1), integer(2), or integer(8) arguments. To improve compatibility, wrapper procedures have been added in the omp_lib module for applicable routines, enabling support for integer(1), integer(2), integer(4), and integer(8) argument types.
Fixes #123948.
Assisted-by: Cursor
>From b5dc85377e472e601fee054c620944e4453489e2 Mon Sep 17 00:00:00 2001
From: Shivarama Rao <shivarama.rao at amd.com>
Date: Sun, 2 Aug 2026 10:20:39 +0530
Subject: [PATCH] [OpenMP][Flang] Add integer-kind wrappers to omp_lib
Many OpenMP routines in omp_lib only accept integer(kind=omp_integer_kind),
which is c_int. Calls with integer(1), integer(2), or integer(8) arguments
therefore fail Flang's type checking. These wrapper functions are added
to omp_lib module file to resolve this issue.
fixes issue #123948
Co-authored-by: Cursor <cursoragent at cursor.com>
---
flang-rt/lib/runtime/CMakeLists.txt | 12 +
.../Lower/OpenMP/omp-lib-integer-wrappers.f90 | 237 ++++++
.../test/Lower/OpenMP/omp-lib-num-threads.f90 | 2 +-
openmp/module/omp_lib.F90.var | 783 ++++++++++++++++--
4 files changed, 986 insertions(+), 48 deletions(-)
create mode 100644 flang/test/Lower/OpenMP/omp-lib-integer-wrappers.f90
diff --git a/flang-rt/lib/runtime/CMakeLists.txt b/flang-rt/lib/runtime/CMakeLists.txt
index ae9a6e7fb7188..4cd3090113af3 100644
--- a/flang-rt/lib/runtime/CMakeLists.txt
+++ b/flang-rt/lib/runtime/CMakeLists.txt
@@ -322,6 +322,13 @@ else ()
set(sources ${supported_sources} ${host_sources} ${f128_sources})
endif ()
+# Include the Fortran OpenMP module implementation (omp_lib.o) in
+# libflang_rt.runtime when the OpenMP runtime is also being built.
+# Skip for GPU-default targets: omp_lib is a host-side Fortran module.
+if (TARGET libomp-mod AND NOT "${LLVM_DEFAULT_TARGET_TRIPLE}" MATCHES "^amdgcn|^nvptx")
+ list(APPEND sources "$<TARGET_OBJECTS:libomp-mod>")
+endif ()
+
if (NOT WIN32)
add_flangrt_library(flang_rt.runtime STATIC SHARED
@@ -333,6 +340,11 @@ if (NOT WIN32)
enable_cuda_compilation(flang_rt.runtime "${sources}")
+ if (TARGET libomp-mod AND TARGET flang_rt.runtime.shared AND TARGET omp)
+ # Resolve bind(c) references from omp_lib when building the shared runtime.
+ target_link_libraries(flang_rt.runtime.shared PUBLIC omp)
+ endif ()
+
# Select a default runtime, which is used for unit and regression tests.
if (TARGET flang_rt.runtime.default)
get_target_property(default_target flang_rt.runtime.default ALIASED_TARGET)
diff --git a/flang/test/Lower/OpenMP/omp-lib-integer-wrappers.f90 b/flang/test/Lower/OpenMP/omp-lib-integer-wrappers.f90
new file mode 100644
index 0000000000000..9881fe56261fa
--- /dev/null
+++ b/flang/test/Lower/OpenMP/omp-lib-integer-wrappers.f90
@@ -0,0 +1,237 @@
+! REQUIRES: openmp_runtime
+
+! RUN: %flang_fc1 -emit-hlfir %openmp_flags %s -o - 2>&1 | FileCheck %s
+! RUN: bbc %openmp_flags -emit-hlfir -o - %s 2>&1 | FileCheck %s
+! RUN: %flang_fc1 -emit-fir %openmp_flags %s -o - 2>&1 | FileCheck %s
+! RUN: bbc -emit-fir %openmp_flags -o - %s 2>&1 | FileCheck %s
+!
+! Test that omp_lib integer-kind wrapper procedures lower to module
+! procedures instead of failing intrinsic resolution.
+
+program main
+ use omp_lib
+ integer(1) :: i1 = 1_1
+ integer(2) :: i2 = 2_2
+ integer(4) :: i4 = 4_4
+ integer(8) :: i8 = 8_8
+ integer(omp_integer_kind) :: ires
+ integer(omp_sched_kind) :: sched_kind
+ integer(kmp_affinity_mask_kind) :: mask
+
+ call omp_set_num_threads(i1)
+ call omp_set_num_threads(i2)
+ call omp_set_num_threads(i4)
+ call omp_set_num_threads(i8)
+
+ call omp_set_max_active_levels(i1)
+ call omp_set_max_active_levels(i2)
+ call omp_set_max_active_levels(i4)
+ call omp_set_max_active_levels(i8)
+
+ call omp_set_default_device(i1)
+ call omp_set_default_device(i2)
+ call omp_set_default_device(i4)
+ call omp_set_default_device(i8)
+
+ call omp_set_num_teams(i1)
+ call omp_set_num_teams(i2)
+ call omp_set_num_teams(i4)
+ call omp_set_num_teams(i8)
+
+ call omp_set_teams_thread_limit(i1)
+ call omp_set_teams_thread_limit(i2)
+ call omp_set_teams_thread_limit(i4)
+ call omp_set_teams_thread_limit(i8)
+
+ call kmp_set_stacksize(i1)
+ call kmp_set_stacksize(i2)
+ call kmp_set_stacksize(i4)
+ call kmp_set_stacksize(i8)
+
+ call kmp_set_blocktime(i1)
+ call kmp_set_blocktime(i2)
+ call kmp_set_blocktime(i4)
+ call kmp_set_blocktime(i8)
+
+ call kmp_set_library(i1)
+ call kmp_set_library(i2)
+ call kmp_set_library(i4)
+ call kmp_set_library(i8)
+
+ call kmp_set_disp_num_buffers(i1)
+ call kmp_set_disp_num_buffers(i2)
+ call kmp_set_disp_num_buffers(i4)
+ call kmp_set_disp_num_buffers(i8)
+
+ ires = omp_get_ancestor_thread_num(i1)
+ ires = omp_get_ancestor_thread_num(i2)
+ ires = omp_get_ancestor_thread_num(i4)
+ ires = omp_get_ancestor_thread_num(i8)
+
+ ires = omp_get_team_size(i1)
+ ires = omp_get_team_size(i2)
+ ires = omp_get_team_size(i4)
+ ires = omp_get_team_size(i8)
+
+ ires = omp_get_place_num_procs(i1)
+ ires = omp_get_place_num_procs(i2)
+ ires = omp_get_place_num_procs(i4)
+ ires = omp_get_place_num_procs(i8)
+
+ call omp_set_schedule(omp_sched_static, i1)
+ call omp_set_schedule(omp_sched_static, i2)
+ call omp_set_schedule(omp_sched_static, i4)
+ call omp_set_schedule(omp_sched_static, i8)
+
+ call omp_get_schedule(sched_kind, i1)
+ call omp_get_schedule(sched_kind, i2)
+ call omp_get_schedule(sched_kind, i4)
+ call omp_get_schedule(sched_kind, i8)
+
+ ires = omp_pause_resource(omp_pause_soft, i1)
+ ires = omp_pause_resource(omp_pause_soft, i2)
+ ires = omp_pause_resource(omp_pause_soft, i4)
+ ires = omp_pause_resource(omp_pause_soft, i8)
+
+ call kmp_create_affinity_mask(mask)
+ ires = kmp_set_affinity_mask_proc(i1, mask)
+ ires = kmp_set_affinity_mask_proc(i2, mask)
+ ires = kmp_set_affinity_mask_proc(i4, mask)
+ ires = kmp_set_affinity_mask_proc(i8, mask)
+
+ ires = kmp_unset_affinity_mask_proc(i1, mask)
+ ires = kmp_unset_affinity_mask_proc(i2, mask)
+ ires = kmp_unset_affinity_mask_proc(i4, mask)
+ ires = kmp_unset_affinity_mask_proc(i8, mask)
+
+ ires = kmp_get_affinity_mask_proc(i1, mask)
+ ires = kmp_get_affinity_mask_proc(i2, mask)
+ ires = kmp_get_affinity_mask_proc(i4, mask)
+ ires = kmp_get_affinity_mask_proc(i8, mask)
+
+ block
+ integer(4) :: ids4(1)
+ integer(8) :: ids8(1)
+ integer(4) :: parts4(1)
+ integer(8) :: parts8(1)
+ call omp_get_place_proc_ids(i4, ids4)
+ call omp_get_place_proc_ids(i8, ids8)
+ call omp_get_partition_place_nums(parts4)
+ call omp_get_partition_place_nums(parts8)
+ end block
+end program
+
+!CHECK-NOT: not yet implemented: intrinsic: omp_set_max_active_levels
+!CHECK-NOT: not yet implemented: intrinsic: omp_set_default_device
+!CHECK-NOT: not yet implemented: intrinsic: omp_set_num_teams
+!CHECK-NOT: not yet implemented: intrinsic: omp_set_teams_thread_limit
+!CHECK-NOT: not yet implemented: intrinsic: kmp_set_stacksize
+!CHECK-NOT: not yet implemented: intrinsic: kmp_set_blocktime
+!CHECK-NOT: not yet implemented: intrinsic: kmp_set_library
+!CHECK-NOT: not yet implemented: intrinsic: kmp_set_disp_num_buffers
+!CHECK-NOT: not yet implemented: intrinsic: omp_get_ancestor_thread_num
+!CHECK-NOT: not yet implemented: intrinsic: omp_get_team_size
+!CHECK-NOT: not yet implemented: intrinsic: omp_get_place_num_procs
+!CHECK-NOT: not yet implemented: intrinsic: omp_set_schedule
+!CHECK-NOT: not yet implemented: intrinsic: omp_get_schedule
+!CHECK-NOT: not yet implemented: intrinsic: omp_pause_resource
+!CHECK-NOT: not yet implemented: intrinsic: kmp_set_affinity_mask_proc
+!CHECK-NOT: not yet implemented: intrinsic: kmp_unset_affinity_mask_proc
+!CHECK-NOT: not yet implemented: intrinsic: kmp_get_affinity_mask_proc
+!CHECK-NOT: not yet implemented: intrinsic: omp_get_place_proc_ids
+!CHECK-NOT: not yet implemented: intrinsic: omp_get_partition_place_nums
+
+!CHECK: fir.call @_QMomp_libPomp_set_num_threads_i1
+!CHECK: fir.call @_QMomp_libPomp_set_num_threads_i2
+!CHECK: fir.call @_QMomp_libPomp_set_num_threads_i4
+!CHECK: fir.call @_QMomp_libPomp_set_num_threads_i8
+
+!CHECK: fir.call @_QMomp_libPomp_set_max_active_levels_i1
+!CHECK: fir.call @_QMomp_libPomp_set_max_active_levels_i2
+!CHECK: fir.call @_QMomp_libPomp_set_max_active_levels_i4
+!CHECK: fir.call @_QMomp_libPomp_set_max_active_levels_i8
+
+!CHECK: fir.call @_QMomp_libPomp_set_default_device_i1
+!CHECK: fir.call @_QMomp_libPomp_set_default_device_i2
+!CHECK: fir.call @_QMomp_libPomp_set_default_device_i4
+!CHECK: fir.call @_QMomp_libPomp_set_default_device_i8
+
+!CHECK: fir.call @_QMomp_libPomp_set_num_teams_i1
+!CHECK: fir.call @_QMomp_libPomp_set_num_teams_i2
+!CHECK: fir.call @_QMomp_libPomp_set_num_teams_i4
+!CHECK: fir.call @_QMomp_libPomp_set_num_teams_i8
+
+!CHECK: fir.call @_QMomp_libPomp_set_teams_thread_limit_i1
+!CHECK: fir.call @_QMomp_libPomp_set_teams_thread_limit_i2
+!CHECK: fir.call @_QMomp_libPomp_set_teams_thread_limit_i4
+!CHECK: fir.call @_QMomp_libPomp_set_teams_thread_limit_i8
+
+!CHECK: fir.call @_QMomp_libPkmp_set_stacksize_i1
+!CHECK: fir.call @_QMomp_libPkmp_set_stacksize_i2
+!CHECK: fir.call @_QMomp_libPkmp_set_stacksize_i4
+!CHECK: fir.call @_QMomp_libPkmp_set_stacksize_i8
+
+!CHECK: fir.call @_QMomp_libPkmp_set_blocktime_i1
+!CHECK: fir.call @_QMomp_libPkmp_set_blocktime_i2
+!CHECK: fir.call @_QMomp_libPkmp_set_blocktime_i4
+!CHECK: fir.call @_QMomp_libPkmp_set_blocktime_i8
+
+!CHECK: fir.call @_QMomp_libPkmp_set_library_i1
+!CHECK: fir.call @_QMomp_libPkmp_set_library_i2
+!CHECK: fir.call @_QMomp_libPkmp_set_library_i4
+!CHECK: fir.call @_QMomp_libPkmp_set_library_i8
+
+!CHECK: fir.call @_QMomp_libPkmp_set_disp_num_buffers_i1
+!CHECK: fir.call @_QMomp_libPkmp_set_disp_num_buffers_i2
+!CHECK: fir.call @_QMomp_libPkmp_set_disp_num_buffers_i4
+!CHECK: fir.call @_QMomp_libPkmp_set_disp_num_buffers_i8
+
+!CHECK: fir.call @_QMomp_libPomp_get_ancestor_thread_num_i1
+!CHECK: fir.call @_QMomp_libPomp_get_ancestor_thread_num_i2
+!CHECK: fir.call @_QMomp_libPomp_get_ancestor_thread_num_i4
+!CHECK: fir.call @_QMomp_libPomp_get_ancestor_thread_num_i8
+
+!CHECK: fir.call @_QMomp_libPomp_get_team_size_i1
+!CHECK: fir.call @_QMomp_libPomp_get_team_size_i2
+!CHECK: fir.call @_QMomp_libPomp_get_team_size_i4
+!CHECK: fir.call @_QMomp_libPomp_get_team_size_i8
+
+!CHECK: fir.call @_QMomp_libPomp_get_place_num_procs_i1
+!CHECK: fir.call @_QMomp_libPomp_get_place_num_procs_i2
+!CHECK: fir.call @_QMomp_libPomp_get_place_num_procs_i4
+!CHECK: fir.call @_QMomp_libPomp_get_place_num_procs_i8
+
+!CHECK: fir.call @_QMomp_libPomp_set_schedule_i1
+!CHECK: fir.call @_QMomp_libPomp_set_schedule_i2
+!CHECK: fir.call @_QMomp_libPomp_set_schedule_i4
+!CHECK: fir.call @_QMomp_libPomp_set_schedule_i8
+
+!CHECK: fir.call @_QMomp_libPomp_get_schedule_i1
+!CHECK: fir.call @_QMomp_libPomp_get_schedule_i2
+!CHECK: fir.call @_QMomp_libPomp_get_schedule_i4
+!CHECK: fir.call @_QMomp_libPomp_get_schedule_i8
+
+!CHECK: fir.call @_QMomp_libPomp_pause_resource_i1
+!CHECK: fir.call @_QMomp_libPomp_pause_resource_i2
+!CHECK: fir.call @_QMomp_libPomp_pause_resource_i4
+!CHECK: fir.call @_QMomp_libPomp_pause_resource_i8
+
+!CHECK: fir.call @_QMomp_libPkmp_set_affinity_mask_proc_i1
+!CHECK: fir.call @_QMomp_libPkmp_set_affinity_mask_proc_i2
+!CHECK: fir.call @_QMomp_libPkmp_set_affinity_mask_proc_i4
+!CHECK: fir.call @_QMomp_libPkmp_set_affinity_mask_proc_i8
+
+!CHECK: fir.call @_QMomp_libPkmp_unset_affinity_mask_proc_i1
+!CHECK: fir.call @_QMomp_libPkmp_unset_affinity_mask_proc_i2
+!CHECK: fir.call @_QMomp_libPkmp_unset_affinity_mask_proc_i4
+!CHECK: fir.call @_QMomp_libPkmp_unset_affinity_mask_proc_i8
+
+!CHECK: fir.call @_QMomp_libPkmp_get_affinity_mask_proc_i1
+!CHECK: fir.call @_QMomp_libPkmp_get_affinity_mask_proc_i2
+!CHECK: fir.call @_QMomp_libPkmp_get_affinity_mask_proc_i4
+!CHECK: fir.call @_QMomp_libPkmp_get_affinity_mask_proc_i8
+
+!CHECK: fir.call @_QMomp_libPomp_get_place_proc_ids_i4
+!CHECK: fir.call @_QMomp_libPomp_get_place_proc_ids_i8
+!CHECK: fir.call @_QMomp_libPomp_get_partition_place_nums_i4
+!CHECK: fir.call @_QMomp_libPomp_get_partition_place_nums_i8
diff --git a/flang/test/Lower/OpenMP/omp-lib-num-threads.f90 b/flang/test/Lower/OpenMP/omp-lib-num-threads.f90
index 6e76dce473057..a2ec031a62d88 100644
--- a/flang/test/Lower/OpenMP/omp-lib-num-threads.f90
+++ b/flang/test/Lower/OpenMP/omp-lib-num-threads.f90
@@ -21,5 +21,5 @@ program main
!CHECK-NOT: not yet implemented: intrinsic: omp_set_num_threads
!CHECK-NOT: not yet implemented: intrinsic: omp_get_num_threads
-!CHECK: fir.call @omp_set_num_threads
+!CHECK: fir.call @_QMomp_libPomp_set_num_threads_i4
!CHECK: fir.call @omp_get_num_threads
diff --git a/openmp/module/omp_lib.F90.var b/openmp/module/omp_lib.F90.var
index a41b2faad9d3d..f3ef93a03ae01 100644
--- a/openmp/module/omp_lib.F90.var
+++ b/openmp/module/omp_lib.F90.var
@@ -63,6 +63,27 @@
! to be exported by this MODULE.
private
+ private :: kmp_get_affinity_mask_proc_c
+ private :: kmp_set_affinity_mask_proc_c
+ private :: kmp_set_blocktime_c
+ private :: kmp_set_disp_num_buffers_c
+ private :: kmp_set_library_c
+ private :: kmp_set_stacksize_c
+ private :: kmp_unset_affinity_mask_proc_c
+ private :: omp_get_ancestor_thread_num_c
+ private :: omp_get_partition_place_nums_c
+ private :: omp_get_place_num_procs_c
+ private :: omp_get_place_proc_ids_c
+ private :: omp_get_schedule_c
+ private :: omp_get_team_size_c
+ private :: omp_pause_resource_c
+ private :: omp_set_default_device_c
+ private :: omp_set_max_active_levels_c
+ private :: omp_set_num_teams_c
+ private :: omp_set_num_threads_c
+ private :: omp_set_schedule_c
+ private :: omp_set_teams_thread_limit_c
+
! Re-export definitions in omp_lib_kinds
public :: omp_integer_kind
public :: omp_logical_kind
@@ -250,10 +271,10 @@
! *** omp_* entry points
! ***
- subroutine omp_set_num_threads(num_threads) bind(c)
+ subroutine omp_set_num_threads_c(num_threads) bind(c, name='omp_set_num_threads')
use omp_lib_kinds
integer (kind=omp_integer_kind), value :: num_threads
- end subroutine omp_set_num_threads
+ end subroutine omp_set_num_threads_c
subroutine omp_set_dynamic(dynamic_threads) bind(c)
use omp_lib_kinds
@@ -310,10 +331,10 @@
integer (kind=omp_integer_kind) omp_get_thread_limit
end function omp_get_thread_limit
- subroutine omp_set_max_active_levels(max_levels) bind(c)
+ subroutine omp_set_max_active_levels_c(max_levels) bind(c, name='omp_set_max_active_levels')
use omp_lib_kinds
integer (kind=omp_integer_kind), value :: max_levels
- end subroutine omp_set_max_active_levels
+ end subroutine omp_set_max_active_levels_c
function omp_get_max_active_levels() bind(c)
use omp_lib_kinds
@@ -330,29 +351,29 @@
integer (kind=omp_integer_kind) omp_get_active_level
end function omp_get_active_level
- function omp_get_ancestor_thread_num(level) bind(c)
+ function omp_get_ancestor_thread_num_c(level) bind(c, name='omp_get_ancestor_thread_num')
use omp_lib_kinds
- integer (kind=omp_integer_kind) omp_get_ancestor_thread_num
+ integer (kind=omp_integer_kind) omp_get_ancestor_thread_num_c
integer (kind=omp_integer_kind), value :: level
- end function omp_get_ancestor_thread_num
+ end function omp_get_ancestor_thread_num_c
- function omp_get_team_size(level) bind(c)
+ function omp_get_team_size_c(level) bind(c, name='omp_get_team_size')
use omp_lib_kinds
- integer (kind=omp_integer_kind) omp_get_team_size
+ integer (kind=omp_integer_kind) omp_get_team_size_c
integer (kind=omp_integer_kind), value :: level
- end function omp_get_team_size
+ end function omp_get_team_size_c
- subroutine omp_set_schedule(kind, chunk_size) bind(c)
+ subroutine omp_set_schedule_c(kind, chunk_size) bind(c, name='omp_set_schedule')
use omp_lib_kinds
integer (kind=omp_sched_kind), value :: kind
integer (kind=omp_integer_kind), value :: chunk_size
- end subroutine omp_set_schedule
+ end subroutine omp_set_schedule_c
- subroutine omp_get_schedule(kind, chunk_size) bind(c)
+ subroutine omp_get_schedule_c(kind, chunk_size) bind(c, name='omp_get_schedule')
use omp_lib_kinds
integer (kind=omp_sched_kind) kind
integer (kind=omp_integer_kind) chunk_size
- end subroutine omp_get_schedule
+ end subroutine omp_get_schedule_c
function omp_get_proc_bind() bind(c)
use omp_lib_kinds
@@ -364,17 +385,17 @@
integer (kind=omp_integer_kind) omp_get_num_places
end function omp_get_num_places
- function omp_get_place_num_procs(place_num) bind(c)
+ function omp_get_place_num_procs_c(place_num) bind(c, name='omp_get_place_num_procs')
use omp_lib_kinds
integer (kind=omp_integer_kind), value :: place_num
- integer (kind=omp_integer_kind) omp_get_place_num_procs
- end function omp_get_place_num_procs
+ integer (kind=omp_integer_kind) omp_get_place_num_procs_c
+ end function omp_get_place_num_procs_c
- subroutine omp_get_place_proc_ids(place_num, ids) bind(c)
+ subroutine omp_get_place_proc_ids_c(place_num, ids) bind(c, name='omp_get_place_proc_ids')
use omp_lib_kinds
integer (kind=omp_integer_kind), value :: place_num
integer (kind=omp_integer_kind) ids(*)
- end subroutine omp_get_place_proc_ids
+ end subroutine omp_get_place_proc_ids_c
function omp_get_place_num() bind(c)
use omp_lib_kinds
@@ -386,10 +407,10 @@
integer (kind=omp_integer_kind) omp_get_partition_num_places
end function omp_get_partition_num_places
- subroutine omp_get_partition_place_nums(place_nums) bind(c)
+ subroutine omp_get_partition_place_nums_c(place_nums) bind(c, name='omp_get_partition_place_nums')
use omp_lib_kinds
integer (kind=omp_integer_kind) place_nums(*)
- end subroutine omp_get_partition_place_nums
+ end subroutine omp_get_partition_place_nums_c
function omp_get_wtime() bind(c)
use omp_lib_kinds
@@ -406,10 +427,10 @@
integer (kind=omp_integer_kind) omp_get_default_device
end function omp_get_default_device
- subroutine omp_set_default_device(device_num) bind(c)
+ subroutine omp_set_default_device_c(device_num) bind(c, name='omp_set_default_device')
use omp_lib_kinds
integer (kind=omp_integer_kind), value :: device_num
- end subroutine omp_set_default_device
+ end subroutine omp_set_default_device_c
function omp_get_num_devices() bind(c)
use omp_lib_kinds
@@ -446,12 +467,12 @@
integer (kind=omp_integer_kind) omp_get_device_num
end function omp_get_device_num
- function omp_pause_resource(kind, device_num) bind(c)
+ function omp_pause_resource_c(kind, device_num) bind(c, name='omp_pause_resource')
use omp_lib_kinds
integer (kind=omp_pause_resource_kind), value :: kind
integer (kind=omp_integer_kind), value :: device_num
- integer (kind=omp_integer_kind) omp_pause_resource
- end function omp_pause_resource
+ integer (kind=omp_integer_kind) omp_pause_resource_c
+ end function omp_pause_resource_c
function omp_pause_resource_all(kind) bind(c)
use omp_lib_kinds
@@ -640,20 +661,20 @@
integer (kind=kmp_size_t_kind) :: omp_capture_affinity
end function omp_capture_affinity
- subroutine omp_set_num_teams(num_teams) bind(c)
+ subroutine omp_set_num_teams_c(num_teams) bind(c, name='omp_set_num_teams')
use omp_lib_kinds
integer (kind=omp_integer_kind), value :: num_teams
- end subroutine omp_set_num_teams
+ end subroutine omp_set_num_teams_c
function omp_get_max_teams() bind(c)
use omp_lib_kinds
integer (kind=omp_integer_kind) omp_get_max_teams
end function omp_get_max_teams
- subroutine omp_set_teams_thread_limit(thread_limit) bind(c)
+ subroutine omp_set_teams_thread_limit_c(thread_limit) bind(c, name='omp_set_teams_thread_limit')
use omp_lib_kinds
integer (kind=omp_integer_kind), value :: thread_limit
- end subroutine omp_set_teams_thread_limit
+ end subroutine omp_set_teams_thread_limit_c
function omp_get_teams_thread_limit() bind(c)
use omp_lib_kinds
@@ -937,20 +958,20 @@
! *** kmp_* entry points
! ***
- subroutine kmp_set_stacksize(size) bind(c)
+ subroutine kmp_set_stacksize_c(size) bind(c, name='kmp_set_stacksize')
use omp_lib_kinds
integer (kind=omp_integer_kind), value :: size
- end subroutine kmp_set_stacksize
+ end subroutine kmp_set_stacksize_c
subroutine kmp_set_stacksize_s(size) bind(c)
use omp_lib_kinds
integer (kind=kmp_size_t_kind), value :: size
end subroutine kmp_set_stacksize_s
- subroutine kmp_set_blocktime(msec) bind(c)
+ subroutine kmp_set_blocktime_c(msec) bind(c, name='kmp_set_blocktime')
use omp_lib_kinds
integer (kind=omp_integer_kind), value :: msec
- end subroutine kmp_set_blocktime
+ end subroutine kmp_set_blocktime_c
subroutine kmp_set_library_serial() bind(c)
end subroutine kmp_set_library_serial
@@ -961,10 +982,10 @@
subroutine kmp_set_library_throughput() bind(c)
end subroutine kmp_set_library_throughput
- subroutine kmp_set_library(libnum) bind(c)
+ subroutine kmp_set_library_c(libnum) bind(c, name='kmp_set_library')
use omp_lib_kinds
integer (kind=omp_integer_kind), value :: libnum
- end subroutine kmp_set_library
+ end subroutine kmp_set_library_c
subroutine kmp_set_defaults(string)
character (len=*) :: string
@@ -990,10 +1011,10 @@
integer (kind=omp_integer_kind) kmp_get_library
end function kmp_get_library
- subroutine kmp_set_disp_num_buffers(num) bind(c)
+ subroutine kmp_set_disp_num_buffers_c(num) bind(c, name='kmp_set_disp_num_buffers')
use omp_lib_kinds
integer (kind=omp_integer_kind), value :: num
- end subroutine kmp_set_disp_num_buffers
+ end subroutine kmp_set_disp_num_buffers_c
function kmp_set_affinity(mask) bind(c)
use omp_lib_kinds
@@ -1022,26 +1043,26 @@
integer (kind=kmp_affinity_mask_kind) mask
end subroutine kmp_destroy_affinity_mask
- function kmp_set_affinity_mask_proc(proc, mask) bind(c)
+ function kmp_set_affinity_mask_proc_c(proc, mask) bind(c, name='kmp_set_affinity_mask_proc')
use omp_lib_kinds
- integer (kind=omp_integer_kind) kmp_set_affinity_mask_proc
+ integer (kind=omp_integer_kind) kmp_set_affinity_mask_proc_c
integer (kind=omp_integer_kind), value :: proc
integer (kind=kmp_affinity_mask_kind) mask
- end function kmp_set_affinity_mask_proc
+ end function kmp_set_affinity_mask_proc_c
- function kmp_unset_affinity_mask_proc(proc, mask) bind(c)
+ function kmp_unset_affinity_mask_proc_c(proc, mask) bind(c, name='kmp_unset_affinity_mask_proc')
use omp_lib_kinds
- integer (kind=omp_integer_kind) kmp_unset_affinity_mask_proc
+ integer (kind=omp_integer_kind) kmp_unset_affinity_mask_proc_c
integer (kind=omp_integer_kind), value :: proc
integer (kind=kmp_affinity_mask_kind) mask
- end function kmp_unset_affinity_mask_proc
+ end function kmp_unset_affinity_mask_proc_c
- function kmp_get_affinity_mask_proc(proc, mask) bind(c)
+ function kmp_get_affinity_mask_proc_c(proc, mask) bind(c, name='kmp_get_affinity_mask_proc')
use omp_lib_kinds
- integer (kind=omp_integer_kind) kmp_get_affinity_mask_proc
+ integer (kind=omp_integer_kind) kmp_get_affinity_mask_proc_c
integer (kind=omp_integer_kind), value :: proc
integer (kind=kmp_affinity_mask_kind) mask
- end function kmp_get_affinity_mask_proc
+ end function kmp_get_affinity_mask_proc_c
function kmp_malloc(size) bind(c)
use omp_lib_kinds
@@ -1150,6 +1171,69 @@
end interface
+ ! Generic interfaces for multiple integer kinds
+ interface omp_set_num_threads
+ module procedure omp_set_num_threads_i1, omp_set_num_threads_i2, omp_set_num_threads_i4, omp_set_num_threads_i8
+ end interface omp_set_num_threads
+ interface omp_set_max_active_levels
+ module procedure omp_set_max_active_levels_i1, omp_set_max_active_levels_i2, omp_set_max_active_levels_i4, omp_set_max_active_levels_i8
+ end interface omp_set_max_active_levels
+ interface omp_set_default_device
+ module procedure omp_set_default_device_i1, omp_set_default_device_i2, omp_set_default_device_i4, omp_set_default_device_i8
+ end interface omp_set_default_device
+ interface omp_set_num_teams
+ module procedure omp_set_num_teams_i1, omp_set_num_teams_i2, omp_set_num_teams_i4, omp_set_num_teams_i8
+ end interface omp_set_num_teams
+ interface omp_set_teams_thread_limit
+ module procedure omp_set_teams_thread_limit_i1, omp_set_teams_thread_limit_i2, omp_set_teams_thread_limit_i4, omp_set_teams_thread_limit_i8
+ end interface omp_set_teams_thread_limit
+ interface kmp_set_stacksize
+ module procedure kmp_set_stacksize_i1, kmp_set_stacksize_i2, kmp_set_stacksize_i4, kmp_set_stacksize_i8
+ end interface kmp_set_stacksize
+ interface kmp_set_blocktime
+ module procedure kmp_set_blocktime_i1, kmp_set_blocktime_i2, kmp_set_blocktime_i4, kmp_set_blocktime_i8
+ end interface kmp_set_blocktime
+ interface kmp_set_library
+ module procedure kmp_set_library_i1, kmp_set_library_i2, kmp_set_library_i4, kmp_set_library_i8
+ end interface kmp_set_library
+ interface kmp_set_disp_num_buffers
+ module procedure kmp_set_disp_num_buffers_i1, kmp_set_disp_num_buffers_i2, kmp_set_disp_num_buffers_i4, kmp_set_disp_num_buffers_i8
+ end interface kmp_set_disp_num_buffers
+ interface omp_get_ancestor_thread_num
+ module procedure omp_get_ancestor_thread_num_i1, omp_get_ancestor_thread_num_i2, omp_get_ancestor_thread_num_i4, omp_get_ancestor_thread_num_i8
+ end interface omp_get_ancestor_thread_num
+ interface omp_get_team_size
+ module procedure omp_get_team_size_i1, omp_get_team_size_i2, omp_get_team_size_i4, omp_get_team_size_i8
+ end interface omp_get_team_size
+ interface omp_get_place_num_procs
+ module procedure omp_get_place_num_procs_i1, omp_get_place_num_procs_i2, omp_get_place_num_procs_i4, omp_get_place_num_procs_i8
+ end interface omp_get_place_num_procs
+ interface omp_set_schedule
+ module procedure omp_set_schedule_i1, omp_set_schedule_i2, omp_set_schedule_i4, omp_set_schedule_i8
+ end interface omp_set_schedule
+ interface omp_get_schedule
+ module procedure omp_get_schedule_i1, omp_get_schedule_i2, omp_get_schedule_i4, omp_get_schedule_i8
+ end interface omp_get_schedule
+ interface omp_pause_resource
+ module procedure omp_pause_resource_i1, omp_pause_resource_i2, omp_pause_resource_i4, omp_pause_resource_i8
+ end interface omp_pause_resource
+ interface omp_get_place_proc_ids
+ module procedure omp_get_place_proc_ids_i4, omp_get_place_proc_ids_i8
+ end interface omp_get_place_proc_ids
+ interface omp_get_partition_place_nums
+ module procedure omp_get_partition_place_nums_i4, omp_get_partition_place_nums_i8
+ end interface omp_get_partition_place_nums
+ interface kmp_set_affinity_mask_proc
+ module procedure kmp_set_affinity_mask_proc_i1, kmp_set_affinity_mask_proc_i2, kmp_set_affinity_mask_proc_i4, kmp_set_affinity_mask_proc_i8
+ end interface kmp_set_affinity_mask_proc
+ interface kmp_unset_affinity_mask_proc
+ module procedure kmp_unset_affinity_mask_proc_i1, kmp_unset_affinity_mask_proc_i2, kmp_unset_affinity_mask_proc_i4, kmp_unset_affinity_mask_proc_i8
+ end interface kmp_unset_affinity_mask_proc
+ interface kmp_get_affinity_mask_proc
+ module procedure kmp_get_affinity_mask_proc_i1, kmp_get_affinity_mask_proc_i2, kmp_get_affinity_mask_proc_i4, kmp_get_affinity_mask_proc_i8
+ end interface kmp_get_affinity_mask_proc
+
+
! make the above routine definitions public
public :: omp_set_num_threads
public :: omp_set_dynamic
@@ -1277,4 +1361,609 @@
public :: omp_get_interop_type_desc
public :: omp_get_interop_rc_desc
+
+ contains
+
+!===----------------------------------------------------------------------===!
+! Integer-kind wrapper procedures for omp_lib (generated).
+!===----------------------------------------------------------------------===!
+
+
+ subroutine omp_set_num_threads_i1(num_threads)
+ use, intrinsic :: iso_c_binding, only: c_int, c_int8_t
+ integer(c_int8_t), value :: num_threads
+ call omp_set_num_threads_c(int(num_threads, kind=c_int))
+ end subroutine omp_set_num_threads_i1
+
+ subroutine omp_set_num_threads_i2(num_threads)
+ use, intrinsic :: iso_c_binding, only: c_int, c_int16_t
+ integer(c_int16_t), value :: num_threads
+ call omp_set_num_threads_c(int(num_threads, kind=c_int))
+ end subroutine omp_set_num_threads_i2
+
+ subroutine omp_set_num_threads_i4(num_threads)
+ use, intrinsic :: iso_c_binding, only: c_int, c_int
+ integer(c_int), value :: num_threads
+ call omp_set_num_threads_c(int(num_threads, kind=c_int))
+ end subroutine omp_set_num_threads_i4
+
+ subroutine omp_set_num_threads_i8(num_threads)
+ use, intrinsic :: iso_c_binding, only: c_int, c_int64_t
+ integer(c_int64_t), value :: num_threads
+ call omp_set_num_threads_c(int(num_threads, kind=c_int))
+ end subroutine omp_set_num_threads_i8
+
+ subroutine omp_set_max_active_levels_i1(max_levels)
+ use, intrinsic :: iso_c_binding, only: c_int, c_int8_t
+ integer(c_int8_t), value :: max_levels
+ call omp_set_max_active_levels_c(int(max_levels, kind=c_int))
+ end subroutine omp_set_max_active_levels_i1
+
+ subroutine omp_set_max_active_levels_i2(max_levels)
+ use, intrinsic :: iso_c_binding, only: c_int, c_int16_t
+ integer(c_int16_t), value :: max_levels
+ call omp_set_max_active_levels_c(int(max_levels, kind=c_int))
+ end subroutine omp_set_max_active_levels_i2
+
+ subroutine omp_set_max_active_levels_i4(max_levels)
+ use, intrinsic :: iso_c_binding, only: c_int, c_int
+ integer(c_int), value :: max_levels
+ call omp_set_max_active_levels_c(int(max_levels, kind=c_int))
+ end subroutine omp_set_max_active_levels_i4
+
+ subroutine omp_set_max_active_levels_i8(max_levels)
+ use, intrinsic :: iso_c_binding, only: c_int, c_int64_t
+ integer(c_int64_t), value :: max_levels
+ call omp_set_max_active_levels_c(int(max_levels, kind=c_int))
+ end subroutine omp_set_max_active_levels_i8
+
+ subroutine omp_set_default_device_i1(device_num)
+ use, intrinsic :: iso_c_binding, only: c_int, c_int8_t
+ integer(c_int8_t), value :: device_num
+ call omp_set_default_device_c(int(device_num, kind=c_int))
+ end subroutine omp_set_default_device_i1
+
+ subroutine omp_set_default_device_i2(device_num)
+ use, intrinsic :: iso_c_binding, only: c_int, c_int16_t
+ integer(c_int16_t), value :: device_num
+ call omp_set_default_device_c(int(device_num, kind=c_int))
+ end subroutine omp_set_default_device_i2
+
+ subroutine omp_set_default_device_i4(device_num)
+ use, intrinsic :: iso_c_binding, only: c_int, c_int
+ integer(c_int), value :: device_num
+ call omp_set_default_device_c(int(device_num, kind=c_int))
+ end subroutine omp_set_default_device_i4
+
+ subroutine omp_set_default_device_i8(device_num)
+ use, intrinsic :: iso_c_binding, only: c_int, c_int64_t
+ integer(c_int64_t), value :: device_num
+ call omp_set_default_device_c(int(device_num, kind=c_int))
+ end subroutine omp_set_default_device_i8
+
+ subroutine omp_set_num_teams_i1(num_teams)
+ use, intrinsic :: iso_c_binding, only: c_int, c_int8_t
+ integer(c_int8_t), value :: num_teams
+ call omp_set_num_teams_c(int(num_teams, kind=c_int))
+ end subroutine omp_set_num_teams_i1
+
+ subroutine omp_set_num_teams_i2(num_teams)
+ use, intrinsic :: iso_c_binding, only: c_int, c_int16_t
+ integer(c_int16_t), value :: num_teams
+ call omp_set_num_teams_c(int(num_teams, kind=c_int))
+ end subroutine omp_set_num_teams_i2
+
+ subroutine omp_set_num_teams_i4(num_teams)
+ use, intrinsic :: iso_c_binding, only: c_int, c_int
+ integer(c_int), value :: num_teams
+ call omp_set_num_teams_c(int(num_teams, kind=c_int))
+ end subroutine omp_set_num_teams_i4
+
+ subroutine omp_set_num_teams_i8(num_teams)
+ use, intrinsic :: iso_c_binding, only: c_int, c_int64_t
+ integer(c_int64_t), value :: num_teams
+ call omp_set_num_teams_c(int(num_teams, kind=c_int))
+ end subroutine omp_set_num_teams_i8
+
+ subroutine omp_set_teams_thread_limit_i1(thread_limit)
+ use, intrinsic :: iso_c_binding, only: c_int, c_int8_t
+ integer(c_int8_t), value :: thread_limit
+ call omp_set_teams_thread_limit_c(int(thread_limit, kind=c_int))
+ end subroutine omp_set_teams_thread_limit_i1
+
+ subroutine omp_set_teams_thread_limit_i2(thread_limit)
+ use, intrinsic :: iso_c_binding, only: c_int, c_int16_t
+ integer(c_int16_t), value :: thread_limit
+ call omp_set_teams_thread_limit_c(int(thread_limit, kind=c_int))
+ end subroutine omp_set_teams_thread_limit_i2
+
+ subroutine omp_set_teams_thread_limit_i4(thread_limit)
+ use, intrinsic :: iso_c_binding, only: c_int, c_int
+ integer(c_int), value :: thread_limit
+ call omp_set_teams_thread_limit_c(int(thread_limit, kind=c_int))
+ end subroutine omp_set_teams_thread_limit_i4
+
+ subroutine omp_set_teams_thread_limit_i8(thread_limit)
+ use, intrinsic :: iso_c_binding, only: c_int, c_int64_t
+ integer(c_int64_t), value :: thread_limit
+ call omp_set_teams_thread_limit_c(int(thread_limit, kind=c_int))
+ end subroutine omp_set_teams_thread_limit_i8
+
+ subroutine kmp_set_stacksize_i1(size)
+ use, intrinsic :: iso_c_binding, only: c_int, c_int8_t
+ integer(c_int8_t), value :: size
+ call kmp_set_stacksize_c(int(size, kind=c_int))
+ end subroutine kmp_set_stacksize_i1
+
+ subroutine kmp_set_stacksize_i2(size)
+ use, intrinsic :: iso_c_binding, only: c_int, c_int16_t
+ integer(c_int16_t), value :: size
+ call kmp_set_stacksize_c(int(size, kind=c_int))
+ end subroutine kmp_set_stacksize_i2
+
+ subroutine kmp_set_stacksize_i4(size)
+ use, intrinsic :: iso_c_binding, only: c_int, c_int
+ integer(c_int), value :: size
+ call kmp_set_stacksize_c(int(size, kind=c_int))
+ end subroutine kmp_set_stacksize_i4
+
+ subroutine kmp_set_stacksize_i8(size)
+ use, intrinsic :: iso_c_binding, only: c_int, c_int64_t
+ integer(c_int64_t), value :: size
+ call kmp_set_stacksize_c(int(size, kind=c_int))
+ end subroutine kmp_set_stacksize_i8
+
+ subroutine kmp_set_blocktime_i1(msec)
+ use, intrinsic :: iso_c_binding, only: c_int, c_int8_t
+ integer(c_int8_t), value :: msec
+ call kmp_set_blocktime_c(int(msec, kind=c_int))
+ end subroutine kmp_set_blocktime_i1
+
+ subroutine kmp_set_blocktime_i2(msec)
+ use, intrinsic :: iso_c_binding, only: c_int, c_int16_t
+ integer(c_int16_t), value :: msec
+ call kmp_set_blocktime_c(int(msec, kind=c_int))
+ end subroutine kmp_set_blocktime_i2
+
+ subroutine kmp_set_blocktime_i4(msec)
+ use, intrinsic :: iso_c_binding, only: c_int, c_int
+ integer(c_int), value :: msec
+ call kmp_set_blocktime_c(int(msec, kind=c_int))
+ end subroutine kmp_set_blocktime_i4
+
+ subroutine kmp_set_blocktime_i8(msec)
+ use, intrinsic :: iso_c_binding, only: c_int, c_int64_t
+ integer(c_int64_t), value :: msec
+ call kmp_set_blocktime_c(int(msec, kind=c_int))
+ end subroutine kmp_set_blocktime_i8
+
+ subroutine kmp_set_library_i1(libnum)
+ use, intrinsic :: iso_c_binding, only: c_int, c_int8_t
+ integer(c_int8_t), value :: libnum
+ call kmp_set_library_c(int(libnum, kind=c_int))
+ end subroutine kmp_set_library_i1
+
+ subroutine kmp_set_library_i2(libnum)
+ use, intrinsic :: iso_c_binding, only: c_int, c_int16_t
+ integer(c_int16_t), value :: libnum
+ call kmp_set_library_c(int(libnum, kind=c_int))
+ end subroutine kmp_set_library_i2
+
+ subroutine kmp_set_library_i4(libnum)
+ use, intrinsic :: iso_c_binding, only: c_int, c_int
+ integer(c_int), value :: libnum
+ call kmp_set_library_c(int(libnum, kind=c_int))
+ end subroutine kmp_set_library_i4
+
+ subroutine kmp_set_library_i8(libnum)
+ use, intrinsic :: iso_c_binding, only: c_int, c_int64_t
+ integer(c_int64_t), value :: libnum
+ call kmp_set_library_c(int(libnum, kind=c_int))
+ end subroutine kmp_set_library_i8
+
+ subroutine kmp_set_disp_num_buffers_i1(num)
+ use, intrinsic :: iso_c_binding, only: c_int, c_int8_t
+ integer(c_int8_t), value :: num
+ call kmp_set_disp_num_buffers_c(int(num, kind=c_int))
+ end subroutine kmp_set_disp_num_buffers_i1
+
+ subroutine kmp_set_disp_num_buffers_i2(num)
+ use, intrinsic :: iso_c_binding, only: c_int, c_int16_t
+ integer(c_int16_t), value :: num
+ call kmp_set_disp_num_buffers_c(int(num, kind=c_int))
+ end subroutine kmp_set_disp_num_buffers_i2
+
+ subroutine kmp_set_disp_num_buffers_i4(num)
+ use, intrinsic :: iso_c_binding, only: c_int, c_int
+ integer(c_int), value :: num
+ call kmp_set_disp_num_buffers_c(int(num, kind=c_int))
+ end subroutine kmp_set_disp_num_buffers_i4
+
+ subroutine kmp_set_disp_num_buffers_i8(num)
+ use, intrinsic :: iso_c_binding, only: c_int, c_int64_t
+ integer(c_int64_t), value :: num
+ call kmp_set_disp_num_buffers_c(int(num, kind=c_int))
+ end subroutine kmp_set_disp_num_buffers_i8
+
+ function omp_get_ancestor_thread_num_i1(level)
+ use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_int, c_int8_t
+ integer(c_int8_t), value :: level
+ integer(kind=omp_integer_kind) :: omp_get_ancestor_thread_num_i1
+ omp_get_ancestor_thread_num_i1 = omp_get_ancestor_thread_num_c(int(level, kind=c_int))
+ end function omp_get_ancestor_thread_num_i1
+
+ function omp_get_ancestor_thread_num_i2(level)
+ use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_int, c_int16_t
+ integer(c_int16_t), value :: level
+ integer(kind=omp_integer_kind) :: omp_get_ancestor_thread_num_i2
+ omp_get_ancestor_thread_num_i2 = omp_get_ancestor_thread_num_c(int(level, kind=c_int))
+ end function omp_get_ancestor_thread_num_i2
+
+ function omp_get_ancestor_thread_num_i4(level)
+ use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_int, c_int
+ integer(c_int), value :: level
+ integer(kind=omp_integer_kind) :: omp_get_ancestor_thread_num_i4
+ omp_get_ancestor_thread_num_i4 = omp_get_ancestor_thread_num_c(int(level, kind=c_int))
+ end function omp_get_ancestor_thread_num_i4
+
+ function omp_get_ancestor_thread_num_i8(level)
+ use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_int, c_int64_t
+ integer(c_int64_t), value :: level
+ integer(kind=omp_integer_kind) :: omp_get_ancestor_thread_num_i8
+ omp_get_ancestor_thread_num_i8 = omp_get_ancestor_thread_num_c(int(level, kind=c_int))
+ end function omp_get_ancestor_thread_num_i8
+
+ function omp_get_team_size_i1(level)
+ use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_int, c_int8_t
+ integer(c_int8_t), value :: level
+ integer(kind=omp_integer_kind) :: omp_get_team_size_i1
+ omp_get_team_size_i1 = omp_get_team_size_c(int(level, kind=c_int))
+ end function omp_get_team_size_i1
+
+ function omp_get_team_size_i2(level)
+ use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_int, c_int16_t
+ integer(c_int16_t), value :: level
+ integer(kind=omp_integer_kind) :: omp_get_team_size_i2
+ omp_get_team_size_i2 = omp_get_team_size_c(int(level, kind=c_int))
+ end function omp_get_team_size_i2
+
+ function omp_get_team_size_i4(level)
+ use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_int, c_int
+ integer(c_int), value :: level
+ integer(kind=omp_integer_kind) :: omp_get_team_size_i4
+ omp_get_team_size_i4 = omp_get_team_size_c(int(level, kind=c_int))
+ end function omp_get_team_size_i4
+
+ function omp_get_team_size_i8(level)
+ use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_int, c_int64_t
+ integer(c_int64_t), value :: level
+ integer(kind=omp_integer_kind) :: omp_get_team_size_i8
+ omp_get_team_size_i8 = omp_get_team_size_c(int(level, kind=c_int))
+ end function omp_get_team_size_i8
+
+ function omp_get_place_num_procs_i1(place_num)
+ use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_int, c_int8_t
+ integer(c_int8_t), value :: place_num
+ integer(kind=omp_integer_kind) :: omp_get_place_num_procs_i1
+ omp_get_place_num_procs_i1 = omp_get_place_num_procs_c(int(place_num, kind=c_int))
+ end function omp_get_place_num_procs_i1
+
+ function omp_get_place_num_procs_i2(place_num)
+ use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_int, c_int16_t
+ integer(c_int16_t), value :: place_num
+ integer(kind=omp_integer_kind) :: omp_get_place_num_procs_i2
+ omp_get_place_num_procs_i2 = omp_get_place_num_procs_c(int(place_num, kind=c_int))
+ end function omp_get_place_num_procs_i2
+
+ function omp_get_place_num_procs_i4(place_num)
+ use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_int, c_int
+ integer(c_int), value :: place_num
+ integer(kind=omp_integer_kind) :: omp_get_place_num_procs_i4
+ omp_get_place_num_procs_i4 = omp_get_place_num_procs_c(int(place_num, kind=c_int))
+ end function omp_get_place_num_procs_i4
+
+ function omp_get_place_num_procs_i8(place_num)
+ use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_int, c_int64_t
+ integer(c_int64_t), value :: place_num
+ integer(kind=omp_integer_kind) :: omp_get_place_num_procs_i8
+ omp_get_place_num_procs_i8 = omp_get_place_num_procs_c(int(place_num, kind=c_int))
+ end function omp_get_place_num_procs_i8
+
+ subroutine omp_set_schedule_i1(kind, chunk_size)
+ use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_int, c_int8_t
+ integer(kind=omp_sched_kind), value :: kind
+ integer(c_int8_t), value :: chunk_size
+ call omp_set_schedule_c(kind, int(chunk_size, kind=c_int))
+ end subroutine omp_set_schedule_i1
+
+ subroutine omp_set_schedule_i2(kind, chunk_size)
+ use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_int, c_int16_t
+ integer(kind=omp_sched_kind), value :: kind
+ integer(c_int16_t), value :: chunk_size
+ call omp_set_schedule_c(kind, int(chunk_size, kind=c_int))
+ end subroutine omp_set_schedule_i2
+
+ subroutine omp_set_schedule_i4(kind, chunk_size)
+ use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_int, c_int
+ integer(kind=omp_sched_kind), value :: kind
+ integer(c_int), value :: chunk_size
+ call omp_set_schedule_c(kind, int(chunk_size, kind=c_int))
+ end subroutine omp_set_schedule_i4
+
+ subroutine omp_set_schedule_i8(kind, chunk_size)
+ use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_int, c_int64_t
+ integer(kind=omp_sched_kind), value :: kind
+ integer(c_int64_t), value :: chunk_size
+ call omp_set_schedule_c(kind, int(chunk_size, kind=c_int))
+ end subroutine omp_set_schedule_i8
+
+ subroutine omp_get_schedule_i1(kind, chunk_size)
+ use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_int, c_int8_t
+ integer(kind=omp_sched_kind), intent(out) :: kind
+ integer(c_int8_t), intent(out) :: chunk_size
+ integer(c_int) :: kind_c, chunk_c
+ call omp_get_schedule_c(kind_c, chunk_c)
+ kind = kind_c
+ chunk_size = chunk_c
+ end subroutine omp_get_schedule_i1
+
+ subroutine omp_get_schedule_i2(kind, chunk_size)
+ use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_int, c_int16_t
+ integer(kind=omp_sched_kind), intent(out) :: kind
+ integer(c_int16_t), intent(out) :: chunk_size
+ integer(c_int) :: kind_c, chunk_c
+ call omp_get_schedule_c(kind_c, chunk_c)
+ kind = kind_c
+ chunk_size = chunk_c
+ end subroutine omp_get_schedule_i2
+
+ subroutine omp_get_schedule_i4(kind, chunk_size)
+ use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_int, c_int
+ integer(kind=omp_sched_kind), intent(out) :: kind
+ integer(c_int), intent(out) :: chunk_size
+ integer(c_int) :: kind_c, chunk_c
+ call omp_get_schedule_c(kind_c, chunk_c)
+ kind = kind_c
+ chunk_size = chunk_c
+ end subroutine omp_get_schedule_i4
+
+ subroutine omp_get_schedule_i8(kind, chunk_size)
+ use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_int, c_int64_t
+ integer(kind=omp_sched_kind), intent(out) :: kind
+ integer(c_int64_t), intent(out) :: chunk_size
+ integer(c_int) :: kind_c, chunk_c
+ call omp_get_schedule_c(kind_c, chunk_c)
+ kind = kind_c
+ chunk_size = chunk_c
+ end subroutine omp_get_schedule_i8
+
+ function omp_pause_resource_i1(kind, device_num)
+ use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_int, c_int8_t
+ integer(kind=omp_pause_resource_kind), value :: kind
+ integer(c_int8_t), value :: device_num
+ integer(kind=omp_integer_kind) :: omp_pause_resource_i1
+ omp_pause_resource_i1 = &
+ omp_pause_resource_c(kind, int(device_num, kind=c_int))
+ end function omp_pause_resource_i1
+
+ function omp_pause_resource_i2(kind, device_num)
+ use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_int, c_int16_t
+ integer(kind=omp_pause_resource_kind), value :: kind
+ integer(c_int16_t), value :: device_num
+ integer(kind=omp_integer_kind) :: omp_pause_resource_i2
+ omp_pause_resource_i2 = &
+ omp_pause_resource_c(kind, int(device_num, kind=c_int))
+ end function omp_pause_resource_i2
+
+ function omp_pause_resource_i4(kind, device_num)
+ use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_int, c_int
+ integer(kind=omp_pause_resource_kind), value :: kind
+ integer(c_int), value :: device_num
+ integer(kind=omp_integer_kind) :: omp_pause_resource_i4
+ omp_pause_resource_i4 = &
+ omp_pause_resource_c(kind, int(device_num, kind=c_int))
+ end function omp_pause_resource_i4
+
+ function omp_pause_resource_i8(kind, device_num)
+ use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_int, c_int64_t
+ integer(kind=omp_pause_resource_kind), value :: kind
+ integer(c_int64_t), value :: device_num
+ integer(kind=omp_integer_kind) :: omp_pause_resource_i8
+ omp_pause_resource_i8 = &
+ omp_pause_resource_c(kind, int(device_num, kind=c_int))
+ end function omp_pause_resource_i8
+
+ function kmp_set_affinity_mask_proc_i1(proc, mask)
+ use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_int, c_int8_t
+ integer(c_int8_t), value :: proc
+ integer(kind=kmp_affinity_mask_kind) :: mask
+ integer(kind=omp_integer_kind) :: kmp_set_affinity_mask_proc_i1
+ kmp_set_affinity_mask_proc_i1 = kmp_set_affinity_mask_proc_c(int(proc, kind=c_int), mask)
+ end function kmp_set_affinity_mask_proc_i1
+
+ function kmp_set_affinity_mask_proc_i2(proc, mask)
+ use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_int, c_int16_t
+ integer(c_int16_t), value :: proc
+ integer(kind=kmp_affinity_mask_kind) :: mask
+ integer(kind=omp_integer_kind) :: kmp_set_affinity_mask_proc_i2
+ kmp_set_affinity_mask_proc_i2 = kmp_set_affinity_mask_proc_c(int(proc, kind=c_int), mask)
+ end function kmp_set_affinity_mask_proc_i2
+
+ function kmp_set_affinity_mask_proc_i4(proc, mask)
+ use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_int, c_int
+ integer(c_int), value :: proc
+ integer(kind=kmp_affinity_mask_kind) :: mask
+ integer(kind=omp_integer_kind) :: kmp_set_affinity_mask_proc_i4
+ kmp_set_affinity_mask_proc_i4 = kmp_set_affinity_mask_proc_c(int(proc, kind=c_int), mask)
+ end function kmp_set_affinity_mask_proc_i4
+
+ function kmp_set_affinity_mask_proc_i8(proc, mask)
+ use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_int, c_int64_t
+ integer(c_int64_t), value :: proc
+ integer(kind=kmp_affinity_mask_kind) :: mask
+ integer(kind=omp_integer_kind) :: kmp_set_affinity_mask_proc_i8
+ kmp_set_affinity_mask_proc_i8 = kmp_set_affinity_mask_proc_c(int(proc, kind=c_int), mask)
+ end function kmp_set_affinity_mask_proc_i8
+
+ function kmp_unset_affinity_mask_proc_i1(proc, mask)
+ use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_int, c_int8_t
+ integer(c_int8_t), value :: proc
+ integer(kind=kmp_affinity_mask_kind) :: mask
+ integer(kind=omp_integer_kind) :: kmp_unset_affinity_mask_proc_i1
+ kmp_unset_affinity_mask_proc_i1 = kmp_unset_affinity_mask_proc_c(int(proc, kind=c_int), mask)
+ end function kmp_unset_affinity_mask_proc_i1
+
+ function kmp_unset_affinity_mask_proc_i2(proc, mask)
+ use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_int, c_int16_t
+ integer(c_int16_t), value :: proc
+ integer(kind=kmp_affinity_mask_kind) :: mask
+ integer(kind=omp_integer_kind) :: kmp_unset_affinity_mask_proc_i2
+ kmp_unset_affinity_mask_proc_i2 = kmp_unset_affinity_mask_proc_c(int(proc, kind=c_int), mask)
+ end function kmp_unset_affinity_mask_proc_i2
+
+ function kmp_unset_affinity_mask_proc_i4(proc, mask)
+ use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_int, c_int
+ integer(c_int), value :: proc
+ integer(kind=kmp_affinity_mask_kind) :: mask
+ integer(kind=omp_integer_kind) :: kmp_unset_affinity_mask_proc_i4
+ kmp_unset_affinity_mask_proc_i4 = kmp_unset_affinity_mask_proc_c(int(proc, kind=c_int), mask)
+ end function kmp_unset_affinity_mask_proc_i4
+
+ function kmp_unset_affinity_mask_proc_i8(proc, mask)
+ use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_int, c_int64_t
+ integer(c_int64_t), value :: proc
+ integer(kind=kmp_affinity_mask_kind) :: mask
+ integer(kind=omp_integer_kind) :: kmp_unset_affinity_mask_proc_i8
+ kmp_unset_affinity_mask_proc_i8 = kmp_unset_affinity_mask_proc_c(int(proc, kind=c_int), mask)
+ end function kmp_unset_affinity_mask_proc_i8
+
+ function kmp_get_affinity_mask_proc_i1(proc, mask)
+ use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_int, c_int8_t
+ integer(c_int8_t), value :: proc
+ integer(kind=kmp_affinity_mask_kind) :: mask
+ integer(kind=omp_integer_kind) :: kmp_get_affinity_mask_proc_i1
+ kmp_get_affinity_mask_proc_i1 = kmp_get_affinity_mask_proc_c(int(proc, kind=c_int), mask)
+ end function kmp_get_affinity_mask_proc_i1
+
+ function kmp_get_affinity_mask_proc_i2(proc, mask)
+ use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_int, c_int16_t
+ integer(c_int16_t), value :: proc
+ integer(kind=kmp_affinity_mask_kind) :: mask
+ integer(kind=omp_integer_kind) :: kmp_get_affinity_mask_proc_i2
+ kmp_get_affinity_mask_proc_i2 = kmp_get_affinity_mask_proc_c(int(proc, kind=c_int), mask)
+ end function kmp_get_affinity_mask_proc_i2
+
+ function kmp_get_affinity_mask_proc_i4(proc, mask)
+ use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_int, c_int
+ integer(c_int), value :: proc
+ integer(kind=kmp_affinity_mask_kind) :: mask
+ integer(kind=omp_integer_kind) :: kmp_get_affinity_mask_proc_i4
+ kmp_get_affinity_mask_proc_i4 = kmp_get_affinity_mask_proc_c(int(proc, kind=c_int), mask)
+ end function kmp_get_affinity_mask_proc_i4
+
+ function kmp_get_affinity_mask_proc_i8(proc, mask)
+ use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_int, c_int64_t
+ integer(c_int64_t), value :: proc
+ integer(kind=kmp_affinity_mask_kind) :: mask
+ integer(kind=omp_integer_kind) :: kmp_get_affinity_mask_proc_i8
+ kmp_get_affinity_mask_proc_i8 = kmp_get_affinity_mask_proc_c(int(proc, kind=c_int), mask)
+ end function kmp_get_affinity_mask_proc_i8
+
+ subroutine omp_get_place_proc_ids_i4(place_num, ids)
+ use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_int, c_int
+ integer(c_int), value :: place_num
+ integer(c_int), intent(out) :: ids(*)
+ integer(c_int) :: n, i
+ integer(c_int), allocatable :: ids_c(:)
+ n = omp_get_place_num_procs_c(int(place_num, kind=c_int))
+ allocate(ids_c(n))
+ call omp_get_place_proc_ids_c(int(place_num, kind=c_int), ids_c)
+ do i = 1, n
+ ids(i) = ids_c(i)
+ end do
+ deallocate(ids_c)
+ end subroutine omp_get_place_proc_ids_i4
+
+ subroutine omp_get_place_proc_ids_i8(place_num, ids)
+ use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_int, c_int64_t
+ integer(c_int64_t), value :: place_num
+ integer(c_int64_t), intent(out) :: ids(*)
+ integer(c_int) :: n, i
+ integer(c_int), allocatable :: ids_c(:)
+ n = omp_get_place_num_procs_c(int(place_num, kind=c_int))
+ allocate(ids_c(n))
+ call omp_get_place_proc_ids_c(int(place_num, kind=c_int), ids_c)
+ do i = 1, n
+ ids(i) = ids_c(i)
+ end do
+ deallocate(ids_c)
+ end subroutine omp_get_place_proc_ids_i8
+
+ subroutine omp_get_partition_place_nums_i4(place_nums)
+ use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_int, c_int
+ integer(c_int), intent(out) :: place_nums(*)
+ integer(c_int) :: n, i
+ integer(c_int), allocatable :: place_nums_c(:)
+ n = omp_get_partition_num_places()
+ allocate(place_nums_c(n))
+ call omp_get_partition_place_nums_c(place_nums_c)
+ do i = 1, n
+ place_nums(i) = place_nums_c(i)
+ end do
+ deallocate(place_nums_c)
+ end subroutine omp_get_partition_place_nums_i4
+
+ subroutine omp_get_partition_place_nums_i8(place_nums)
+ use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_int, c_int64_t
+ integer(c_int64_t), intent(out) :: place_nums(*)
+ integer(c_int) :: n, i
+ integer(c_int), allocatable :: place_nums_c(:)
+ n = omp_get_partition_num_places()
+ allocate(place_nums_c(n))
+ call omp_get_partition_place_nums_c(place_nums_c)
+ do i = 1, n
+ place_nums(i) = place_nums_c(i)
+ end do
+ deallocate(place_nums_c)
+ end subroutine omp_get_partition_place_nums_i8
end module omp_lib
More information about the flang-commits
mailing list