[Openmp-commits] [flang] [openmp] [WIP][flang] Compile proper `omp_lib.mod` from the `openmp/src/include` sources (PR #80874)
Michael Klemm via Openmp-commits
openmp-commits at lists.llvm.org
Wed Feb 28 09:30:10 PST 2024
https://github.com/mjklemm updated https://github.com/llvm/llvm-project/pull/80874
>From 75b7a1cd869d9aec3f6e034d4c3e892babbe9ae3 Mon Sep 17 00:00:00 2001
From: Michael Klemm <michael.klemm at amd.com>
Date: Tue, 6 Feb 2024 17:59:36 +0100
Subject: [PATCH 01/19] Guard '!$dir if' with '#ifdef __INTEL_COMPILER'
Flang does not yet support '!$dir if' directives. So, to make
this file compilable with Flang, they need to be guarded with
__INTEL_COMPILER (since the if is targeting the intel compiler
anyways)
---
openmp/runtime/src/include/omp_lib.f90.var | 22 +++++++++++++++++++++-
1 file changed, 21 insertions(+), 1 deletion(-)
diff --git a/openmp/runtime/src/include/omp_lib.f90.var b/openmp/runtime/src/include/omp_lib.f90.var
index 1ca542db3767ef..cc031a653d80a5 100644
--- a/openmp/runtime/src/include/omp_lib.f90.var
+++ b/openmp/runtime/src/include/omp_lib.f90.var
@@ -37,7 +37,7 @@
integer, parameter :: omp_interop_kind = c_intptr_t
integer, parameter :: omp_interop_fr_kind = omp_integer_kind
- type omp_alloctrait
+ type omp_alloctrait!
integer(kind=omp_alloctrait_key_kind) key
integer(kind=omp_alloctrait_val_kind) value
end type omp_alloctrait
@@ -392,82 +392,102 @@
end subroutine omp_fulfill_event
subroutine omp_init_lock(svar) bind(c)
+#ifdef __INTEL_COMPILER
!DIR$ IF(__INTEL_COMPILER.GE.1400)
!DIR$ attributes known_intrinsic :: omp_init_lock
!DIR$ ENDIF
+#endif
use omp_lib_kinds
integer (kind=omp_lock_kind) svar
end subroutine omp_init_lock
subroutine omp_destroy_lock(svar) bind(c)
+#ifdef __INTEL_COMPILER
!DIR$ IF(__INTEL_COMPILER.GE.1400)
!DIR$ attributes known_intrinsic :: omp_destroy_lock
!DIR$ ENDIF
+#endif
use omp_lib_kinds
integer (kind=omp_lock_kind) svar
end subroutine omp_destroy_lock
subroutine omp_set_lock(svar) bind(c)
+#ifdef __INTEL_COMPILER
!DIR$ IF(__INTEL_COMPILER.GE.1400)
!DIR$ attributes known_intrinsic :: omp_set_lock
!DIR$ ENDIF
+#endif
use omp_lib_kinds
integer (kind=omp_lock_kind) svar
end subroutine omp_set_lock
subroutine omp_unset_lock(svar) bind(c)
+#ifdef __INTEL_COMPILER
!DIR$ IF(__INTEL_COMPILER.GE.1400)
!DIR$ attributes known_intrinsic :: omp_unset_lock
!DIR$ ENDIF
+#endif
use omp_lib_kinds
integer (kind=omp_lock_kind) svar
end subroutine omp_unset_lock
function omp_test_lock(svar) bind(c)
+#ifdef __INTEL_COMPILER
!DIR$ IF(__INTEL_COMPILER.GE.1400)
!DIR$ attributes known_intrinsic :: omp_test_lock
!DIR$ ENDIF
+#endif
use omp_lib_kinds
logical (kind=omp_logical_kind) omp_test_lock
integer (kind=omp_lock_kind) svar
end function omp_test_lock
subroutine omp_init_nest_lock(nvar) bind(c)
+#ifdef __INTEL_COMPILER
!DIR$ IF(__INTEL_COMPILER.GE.1400)
!DIR$ attributes known_intrinsic :: omp_init_nest_lock
!DIR$ ENDIF
+#endif
use omp_lib_kinds
integer (kind=omp_nest_lock_kind) nvar
end subroutine omp_init_nest_lock
subroutine omp_destroy_nest_lock(nvar) bind(c)
+#ifdef __INTEL_COMPILER
!DIR$ IF(__INTEL_COMPILER.GE.1400)
!DIR$ attributes known_intrinsic :: omp_destroy_nest_lock
!DIR$ ENDIF
+#endif
use omp_lib_kinds
integer (kind=omp_nest_lock_kind) nvar
end subroutine omp_destroy_nest_lock
subroutine omp_set_nest_lock(nvar) bind(c)
+#ifdef __INTEL_COMPILER
!DIR$ IF(__INTEL_COMPILER.GE.1400)
!DIR$ attributes known_intrinsic :: omp_set_nest_lock
!DIR$ ENDIF
+#endif
use omp_lib_kinds
integer (kind=omp_nest_lock_kind) nvar
end subroutine omp_set_nest_lock
subroutine omp_unset_nest_lock(nvar) bind(c)
+#ifdef __INTEL_COMPILER
!DIR$ IF(__INTEL_COMPILER.GE.1400)
!DIR$ attributes known_intrinsic :: omp_unset_nest_lock
!DIR$ ENDIF
+#endif
use omp_lib_kinds
integer (kind=omp_nest_lock_kind) nvar
end subroutine omp_unset_nest_lock
function omp_test_nest_lock(nvar) bind(c)
+#ifdef __INTEL_COMPILER
!DIR$ IF(__INTEL_COMPILER.GE.1400)
!DIR$ attributes known_intrinsic :: omp_test_nest_lock
!DIR$ ENDIF
+#endif
use omp_lib_kinds
integer (kind=omp_integer_kind) omp_test_nest_lock
integer (kind=omp_nest_lock_kind) nvar
>From 38f20849c912866d95002cb4829fb3f5f439948b Mon Sep 17 00:00:00 2001
From: Michael Klemm <michael.klemm at amd.com>
Date: Tue, 6 Feb 2024 22:33:03 +0100
Subject: [PATCH 02/19] Remove accidental typo
---
openmp/runtime/src/include/omp_lib.f90.var | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/openmp/runtime/src/include/omp_lib.f90.var b/openmp/runtime/src/include/omp_lib.f90.var
index cc031a653d80a5..68799fc52ff020 100644
--- a/openmp/runtime/src/include/omp_lib.f90.var
+++ b/openmp/runtime/src/include/omp_lib.f90.var
@@ -37,7 +37,7 @@
integer, parameter :: omp_interop_kind = c_intptr_t
integer, parameter :: omp_interop_fr_kind = omp_integer_kind
- type omp_alloctrait!
+ type omp_alloctrait
integer(kind=omp_alloctrait_key_kind) key
integer(kind=omp_alloctrait_val_kind) value
end type omp_alloctrait
>From d9482466ce3cbdfed295c65f61955cb15f7c72bd Mon Sep 17 00:00:00 2001
From: Michael Klemm <michael.klemm at amd.com>
Date: Wed, 7 Feb 2024 14:21:15 +0100
Subject: [PATCH 03/19] Rename omp_lib.f90.var to omp_lib.F90.var, incl it's
processed output
---
openmp/runtime/src/CMakeLists.txt | 6 +++---
.../src/include/{omp_lib.f90.var => omp_lib.F90.var} | 0
2 files changed, 3 insertions(+), 3 deletions(-)
rename openmp/runtime/src/include/{omp_lib.f90.var => omp_lib.F90.var} (100%)
diff --git a/openmp/runtime/src/CMakeLists.txt b/openmp/runtime/src/CMakeLists.txt
index b0ecf1213dabe5..7e2a05e003b8d9 100644
--- a/openmp/runtime/src/CMakeLists.txt
+++ b/openmp/runtime/src/CMakeLists.txt
@@ -18,7 +18,7 @@ if(${LIBOMP_OMPT_SUPPORT})
configure_file(${LIBOMP_INC_DIR}/omp-tools.h.var omp-tools.h @ONLY)
endif()
-# Generate message catalog files: kmp_i18n_id.inc and kmp_i18n_default.inc
+# Generate message catalog fioles: kmp_i18n_id.inc and kmp_i18n_default.inc
add_custom_command(
OUTPUT kmp_i18n_id.inc
COMMAND ${PERL_EXECUTABLE} ${LIBOMP_TOOLS_DIR}/message-converter.pl --os=${LIBOMP_PERL_SCRIPT_OS}
@@ -314,7 +314,7 @@ endif()
# One compilation step creates both omp_lib.mod and omp_lib_kinds.mod
if(${LIBOMP_FORTRAN_MODULES})
configure_file(${LIBOMP_INC_DIR}/omp_lib.h.var omp_lib.h @ONLY)
- configure_file(${LIBOMP_INC_DIR}/omp_lib.f90.var omp_lib.f90 @ONLY)
+ configure_file(${LIBOMP_INC_DIR}/omp_lib.F90.var omp_lib.F90 @ONLY)
# Workaround for gfortran to build modules with the
# omp_sched_monotonic integer parameter
if (CMAKE_Fortran_COMPILER_ID STREQUAL "GNU")
@@ -323,7 +323,7 @@ if(${LIBOMP_FORTRAN_MODULES})
add_custom_target(libomp-mod ALL DEPENDS omp_lib.mod omp_lib_kinds.mod)
libomp_get_fflags(LIBOMP_CONFIGURED_FFLAGS)
if(CMAKE_Fortran_COMPILER_SUPPORTS_F90)
- set(LIBOMP_FORTRAN_SOURCE_FILE omp_lib.f90)
+ set(LIBOMP_FORTRAN_SOURCE_FILE omp_lib.F90)
else()
message(FATAL_ERROR "Fortran module build requires Fortran 90 compiler")
endif()
diff --git a/openmp/runtime/src/include/omp_lib.f90.var b/openmp/runtime/src/include/omp_lib.F90.var
similarity index 100%
rename from openmp/runtime/src/include/omp_lib.f90.var
rename to openmp/runtime/src/include/omp_lib.F90.var
>From 3f6d1eb04cbc9529deb85d8053a27782a0cc0436 Mon Sep 17 00:00:00 2001
From: Michael Klemm <michael.klemm at amd.com>
Date: Thu, 8 Feb 2024 16:06:00 +0100
Subject: [PATCH 04/19] Remove old .h and .f90 file
---
flang/module/omp_lib.f90 | 13 --
flang/module/omp_lib.h | 454 ---------------------------------------
2 files changed, 467 deletions(-)
delete mode 100644 flang/module/omp_lib.f90
delete mode 100644 flang/module/omp_lib.h
diff --git a/flang/module/omp_lib.f90 b/flang/module/omp_lib.f90
deleted file mode 100644
index 2ca15da6891591..00000000000000
--- a/flang/module/omp_lib.f90
+++ /dev/null
@@ -1,13 +0,0 @@
-!===-- module/omp_lib.f90 --------------------------------------------------===!
-!
-! Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-! See https://llvm.org/LICENSE.txt for license information.
-! SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-!
-!===------------------------------------------------------------------------===!
-
-module omp_lib
-
-include "omp_lib.h"
-
-end module omp_lib
diff --git a/flang/module/omp_lib.h b/flang/module/omp_lib.h
deleted file mode 100644
index efc9ceb16968bb..00000000000000
--- a/flang/module/omp_lib.h
+++ /dev/null
@@ -1,454 +0,0 @@
-!===-- module/omp_lib.h ------------------------------------------*- F90 -*-===!
-!
-! Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-! See https://llvm.org/LICENSE.txt for license information.
-! SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-!
-!===------------------------------------------------------------------------===!
-
-!dir$ free
-
- integer, parameter :: omp_integer_kind = selected_int_kind(9) ! 32-bit int
- integer, parameter :: omp_logical_kind = 1 ! C_BOOL
-
- integer, parameter :: omp_sched_kind = omp_integer_kind
- integer, parameter :: omp_proc_bind_kind = omp_integer_kind
- integer, parameter :: omp_pause_resource_kind = omp_integer_kind
- integer, parameter :: omp_sync_hint_kind = omp_integer_kind
- integer, parameter :: omp_lock_hint_kind = omp_sync_hint_kind
- integer, parameter :: omp_event_handle_kind = omp_integer_kind
- integer, parameter :: omp_alloctrait_key_kind = omp_integer_kind
- integer, parameter :: omp_alloctrait_val_kind = omp_integer_kind
- integer, parameter :: omp_allocator_handle_kind = omp_integer_kind
- integer, parameter :: omp_memspace_handle_kind = omp_integer_kind
- integer, parameter :: omp_lock_kind = int_ptr_kind()
- integer, parameter :: omp_nest_lock_kind = int_ptr_kind()
- integer, parameter :: omp_depend_kind = omp_integer_kind
-
- integer(kind=omp_sched_kind), parameter :: &
- omp_sched_static = 1, &
- omp_sched_dynamic = 2, &
- omp_sched_guided = 3, &
- omp_sched_auto = 4
-
- integer(kind=omp_proc_bind_kind), parameter :: &
- omp_proc_bind_false = 0, &
- omp_proc_bind_true = 1, &
- omp_proc_bind_master = 2, &
- omp_proc_bind_close = 3, &
- omp_proc_bind_spread = 4
-
- integer(kind=omp_pause_resource_kind), parameter :: &
- omp_pause_soft = 1, &
- omp_pause_hard = 2
-
- integer(kind=omp_sync_hint_kind), parameter :: &
- omp_sync_hint_none = 0, &
- omp_sync_hint_uncontended = 1, &
- omp_sync_hint_contended = 2, &
- omp_sync_hint_nonspeculative = 4, &
- omp_sync_hint_speculative = 8
- integer(kind=omp_lock_hint_kind), parameter :: &
- omp_lock_hint_none = omp_sync_hint_none, &
- omp_lock_hint_uncontended = omp_sync_hint_uncontended, &
- omp_lock_hint_contended = omp_sync_hint_contended, &
- omp_lock_hint_nonspeculative = omp_sync_hint_nonspeculative, &
- omp_lock_hint_speculative = omp_sync_hint_speculative
-
- integer(kind=omp_event_handle_kind), parameter :: &
- omp_allow_completion_event = 0, &
- omp_task_fulfill_event = 1
-
- integer(kind=omp_alloctrait_key_kind), parameter :: &
- omp_atk_sync_hint = 1, &
- omp_atk_alignment = 2, &
- omp_atk_access = 3, &
- omp_atk_pool_size = 4, &
- omp_atk_fallback = 5, &
- omp_atk_fb_data = 6, &
- omp_atk_pinned = 7, &
- omp_atk_partition = 8
-
- integer(kind=omp_alloctrait_val_kind), parameter :: &
- omp_atv_false = 0, &
- omp_atv_true = 1, &
- omp_atv_default = 2, &
- omp_atv_contended = 3, &
- omp_atv_uncontended = 4, &
- omp_atv_sequential = 5, &
- omp_atv_private = 6, &
- omp_atv_all = 7, &
- omp_atv_thread = 8, &
- omp_atv_pteam = 9, &
- omp_atv_cgroup = 10, &
- omp_atv_default_mem_fb = 11, &
- omp_atv_null_fb = 12, &
- omp_atv_abort_fb = 13, &
- omp_atv_allocator_fb = 14, &
- omp_atv_environment = 15, &
- omp_atv_nearest = 16, &
- omp_atv_blocked = 17, &
- omp_atv_interleaved = 18
-
- type, bind(c) :: omp_alloctrait
- integer(kind=omp_alloctrait_key_kind) :: key, value
- end type omp_alloctrait
-
- integer(kind=omp_allocator_handle_kind), parameter :: omp_null_allocator = 0
-
- integer(kind=omp_memspace_handle_kind), parameter :: &
- omp_default_mem_space = 0, &
- omp_large_cap_mem_space = 0, &
- omp_const_mem_space = 0, &
- omp_high_bw_mem_space = 0, &
- omp_low_lat_mem_space = 0, &
- omp_default_mem_alloc = 1, &
- omp_large_cap_mem_alloc = omp_default_mem_alloc, &
- omp_const_mem_alloc = 1, &
- omp_high_bw_mem_alloc = 1, &
- omp_low_lat_mem_alloc = 1, &
- omp_thread_mem_alloc = omp_atv_thread, &
- omp_pteam_mem_alloc = omp_atv_pteam, &
- omp_cgroup_mem_alloc = omp_atv_cgroup
-
- integer(kind=omp_integer_kind), parameter :: openmp_version = 200805
-
- interface
-
- subroutine omp_set_num_threads(nthreads) bind(c)
- import
- integer(kind=omp_integer_kind), value :: nthreads
- end subroutine omp_set_num_threads
-
- function omp_get_num_threads() bind(c)
- import
- integer(kind=omp_integer_kind) :: omp_get_num_threads
- end function omp_get_num_threads
-
- function omp_get_max_threads() bind(c)
- import
- integer(kind=omp_integer_kind) :: omp_get_max_threads
- end function omp_get_max_threads
-
- function omp_get_thread_num() bind(c)
- import
- integer(kind=omp_integer_kind) :: omp_get_thread_num
- end function omp_get_thread_num
-
- function omp_get_num_procs() bind(c)
- import
- integer(kind=omp_integer_kind) :: omp_get_num_procs
- end function omp_get_num_procs
-
- function omp_in_parallel() bind(c)
- import
- logical(kind=omp_logical_kind) :: omp_in_parallel
- end function omp_in_parallel
-
- subroutine omp_set_dynamic(enable) bind(c)
- import
- logical(kind=omp_logical_kind), value :: enable
- end subroutine omp_set_dynamic
-
- function omp_get_dynamic() bind(c)
- import
- logical(kind=omp_logical_kind) :: omp_get_dynamic
- end function omp_get_dynamic
-
- function omp_get_cancelation() bind(c)
- import
- logical(kind=omp_logical_kind) :: omp_get_cancelation
- end function omp_get_cancelation
-
- subroutine omp_set_nested(enable) bind(c)
- import
- logical(kind=omp_logical_kind), value :: enable
- end subroutine omp_set_nested
-
- function omp_get_nested() bind(c)
- import
- logical(kind=omp_logical_kind) ::omp_get_nested
- end function omp_get_nested
-
- subroutine omp_set_schedule(kind, modifier) bind(c)
- import
- integer(kind=omp_integer_kind), value :: kind, modifier
- end subroutine omp_set_schedule
-
- subroutine omp_get_schedule(kind, modifier) bind(c)
- import
- integer(kind=omp_integer_kind), intent(out) :: kind, modifier
- end subroutine omp_get_schedule
-
- function omp_get_thread_limit() bind(c)
- import
- integer(kind=omp_integer_kind) :: omp_get_thread_limit
- end function omp_get_thread_limit
-
- function omp_get_supported_active_levels() bind(c)
- import
- integer(kind=omp_integer_kind) :: omp_get_supported_active_levels
- end function omp_get_supported_active_levels
-
- subroutine omp_set_max_active_levels(max_levels) bind(c)
- import
- integer(kind=omp_integer_kind), value :: max_levels
- end subroutine omp_set_max_active_levels
-
- function omp_get_max_active_levels() bind(c)
- import
- integer(kind=omp_integer_kind) :: omp_get_max_active_levels
- end function omp_get_max_active_levels
-
- function omp_get_level() bind(c)
- import
- integer(kind=omp_integer_kind) :: omp_get_level
- end function omp_get_level
-
- function omp_get_ancestor_thread_num(level) bind(c)
- import
- integer(kind=omp_integer_kind), value :: level
- integer(kind=omp_integer_kind) :: omp_get_ancestor_thread_num
- end function omp_get_ancestor_thread_num
-
- function omp_get_team_size(level) bind(c)
- import
- integer(kind=omp_integer_kind), value :: level
- integer(kind=omp_integer_kind) :: omp_get_team_size
- end function omp_get_team_size
-
- function omp_get_active_level() bind(c)
- import
- integer(kind=omp_integer_kind) :: omp_get_active_level
- end function omp_get_active_level
-
- function omp_in_final() bind(c)
- import
- logical(kind=omp_logical_kind) :: omp_in_final
- end function omp_in_final
-
- function omp_get_proc_bind() bind(c)
- import
- integer(kind=omp_proc_bind_kind) :: omp_get_proc_bind
- end function omp_get_proc_bind
-
- function omp_get_num_places() bind(c)
- import
- 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)
- import
- 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
-
- subroutine omp_get_place_proc_ids(place_num, ids) bind(c)
- import
- integer(kind=omp_integer_kind), value :: place_num
- integer(kind=omp_integer_kind), intent(out) :: ids(*)
- end subroutine omp_get_place_proc_ids
-
- function omp_get_place_num() bind(c)
- import
- integer(kind=omp_integer_kind) :: omp_get_place_num
- end function omp_get_place_num
-
- function omp_get_partition_num_places() bind(c)
- import
- 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)
- import
- integer(kind=omp_integer_kind), intent(out) :: place_nums(*)
- end subroutine omp_get_partition_place_nums
-
- subroutine omp_set_affinity_format(format) bind(c)
- import
- character(len=*), intent(in) :: format
- end subroutine omp_set_affinity_format
-
- function omp_get_affinity_format(buffer) bind(c)
- import
- character(len=*), intent(out) :: buffer
- integer(kind=omp_integer_kind) :: omp_get_affinity_format
- end function omp_get_affinity_format
-
- subroutine omp_display_affinity(format) bind(c)
- import
- character(len=*), intent(in) :: format
- end subroutine omp_display_affinity
-
- function omp_capture_affinity(buffer, format) bind(c)
- import
- character(len=*), intent(out) :: buffer
- character(len=*), intent(in) :: format
- integer(kind=omp_integer_kind) omp_capture_affinity
- end function omp_capture_affinity
-
- subroutine omp_set_default_device(device_num) bind(c)
- import
- integer(kind=omp_integer_kind), value :: device_num
- end subroutine omp_set_default_device
-
- function omp_get_default_device() bind(c)
- import
- integer(kind=omp_integer_kind) :: omp_get_default_device
- end function omp_get_default_device
-
- function omp_get_num_devices() bind(c)
- import
- integer(kind=omp_integer_kind) :: omp_get_num_devices
- end function omp_get_num_devices
-
- function omp_get_device_num() bind(c)
- import
- integer(kind=omp_integer_kind) :: omp_get_device_num
- end function omp_get_device_num
-
- function omp_get_num_teams() bind(c)
- import
- integer(kind=omp_integer_kind) :: omp_get_num_teams
- end function omp_get_num_teams
-
- function omp_get_team_num() bind(c)
- import
- integer(kind=omp_integer_kind) :: omp_get_team_num
- end function omp_get_team_num
-
- function omp_is_initial_device() bind(c)
- import
- integer(kind=omp_logical_kind) :: omp_is_initial_device ! TODO: should this be LOGICAL?
- end function omp_is_initial_device
-
- function omp_get_initial_device() bind(c)
- import
- integer(kind=omp_integer_kind) :: omp_get_initial_device
- end function omp_get_initial_device
-
- function omp_get_max_task_priority() bind(c)
- import
- integer(kind=omp_integer_kind) :: omp_get_max_task_priority
- end function omp_get_max_task_priority
-
- function omp_pause_resource(kind, device_num) bind(c)
- import
- 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
-
- function omp_pause_resource_all(kind) bind(c)
- import
- integer(kind=omp_pause_resource_kind), value :: kind
- integer(kind=omp_integer_kind) :: omp_pause_resource_all
- end function omp_pause_resource_all
-
-! Lock routines
- subroutine omp_init_lock(lockvar) bind(c, name="omp_init_lock_")
- import
- integer(kind=omp_lock_kind), intent(out) :: lockvar
- end subroutine omp_init_lock
-
- subroutine omp_init_lock_with_hint(lockvar, hint) bind(c, name="omp_init_lock_with_hint_")
- import
- integer(kind=omp_lock_kind), intent(out) :: lockvar
- integer(kind=omp_sync_hint_kind), value :: hint
- end subroutine omp_init_lock_with_hint
-
- subroutine omp_destroy_lock(lockvar) bind(c, name="omp_destroy_lock_")
- import
- integer(kind=omp_lock_kind), intent(inout) :: lockvar
- end subroutine omp_destroy_lock
-
- subroutine omp_set_lock(lockvar) bind(c, name="omp_set_lock_")
- import
- integer(kind=omp_lock_kind), intent(inout) :: lockvar
- end subroutine omp_set_lock
-
- subroutine omp_unset_lock(lockvar) bind(c, name="omp_unset_lock_")
- import
- integer(kind=omp_lock_kind), intent(inout) :: lockvar
- end subroutine omp_unset_lock
-
- function omp_test_lock(lockvar) bind(c, name="omp_test_lock_")
- import
- integer(kind=omp_lock_kind), intent(inout) :: lockvar
- logical(kind=omp_logical_kind) :: omp_test_lock
- end function omp_test_lock
-
- subroutine omp_init_nest_lock(lockvar) bind(c, name="omp_init_nest_lock_")
- import
- integer(kind=omp_nest_lock_kind), intent(out) :: lockvar
- end subroutine omp_init_nest_lock
-
- subroutine omp_init_nest_lock_with_hint(lockvar, hint) bind(c, name="omp_init_nest_lock_with_hint_")
- import
- integer(kind=omp_nest_lock_kind), intent(out) :: lockvar
- integer(kind=omp_sync_hint_kind), value :: hint
- end subroutine omp_init_nest_lock_with_hint
-
- subroutine omp_destroy_nest_lock(lockvar) bind(c, name="omp_destroy_nest_lock_")
- import
- integer(kind=omp_nest_lock_kind), intent(inout) :: lockvar
- end subroutine omp_destroy_nest_lock
-
- subroutine omp_set_nest_lock(lockvar) bind(c, name="omp_set_nest_lock_")
- import
- integer(kind=omp_nest_lock_kind), intent(inout) :: lockvar
- end subroutine omp_set_nest_lock
-
- subroutine omp_unset_nest_lock(lockvar) bind(c, name="omp_unset_nest_lock_")
- import
- integer(kind=omp_nest_lock_kind), intent(inout) :: lockvar
- end subroutine omp_unset_nest_lock
-
- function omp_test_nest_lock(lockvar) bind(c, name="omp_test_nest_lock_")
- import
- integer(kind=omp_integer_kind) :: omp_test_nest_lock
- integer(kind=omp_nest_lock_kind), intent(inout) :: lockvar
- end function omp_test_nest_lock
-
-! Timing routines
- function omp_get_wtime() bind(c)
- double precision omp_get_wtime
- end function omp_get_wtime
-
- function omp_get_wtick() bind(c)
- double precision omp_get_wtick
- end function omp_get_wtick
-
-! Event routine
- subroutine omp_fullfill_event(event) bind(c) ! TODO: is this the correct spelling?
- import
- integer(kind=omp_event_handle_kind) :: event
- end subroutine omp_fullfill_event
-
-! Device Memory Routines
-
-! Memory Management Routines
- function omp_init_allocator(memspace, ntraits, traits) bind(c)
- import
- integer(kind=omp_memspace_handle_kind), value :: memspace
- integer, value :: ntraits
- type(omp_alloctrait), intent(in) :: traits(*)
- integer(kind=omp_allocator_handle_kind) :: omp_init_allocator
- end function omp_init_allocator
-
- subroutine omp_destroy_allocator(allocator) bind(c)
- import
- integer(kind=omp_allocator_handle_kind), value :: allocator
- end subroutine omp_destroy_allocator
-
- subroutine omp_set_default_allocator(allocator) bind(c)
- import
- integer(kind=omp_allocator_handle_kind), value :: allocator
- end subroutine omp_set_default_allocator
-
- function omp_get_default_allocator() bind(c)
- import
- integer(kind=omp_allocator_handle_kind) :: omp_get_default_allocator
- end function omp_get_default_allocator
-
- end interface
>From f09d582b07009831010dc3ad473e5df0ffe8399d Mon Sep 17 00:00:00 2001
From: Michael Klemm <michael.klemm at amd.com>
Date: Thu, 8 Feb 2024 16:06:28 +0100
Subject: [PATCH 05/19] Implement CMakery to produce .mod files from OpenMP
runtime sources
---
flang/tools/f18/CMakeLists.txt | 22 ++++++++++++++++++++--
openmp/runtime/src/CMakeLists.txt | 5 +++--
2 files changed, 23 insertions(+), 4 deletions(-)
diff --git a/flang/tools/f18/CMakeLists.txt b/flang/tools/f18/CMakeLists.txt
index ba6c6642c0b62e..8369eae39994d0 100644
--- a/flang/tools/f18/CMakeLists.txt
+++ b/flang/tools/f18/CMakeLists.txt
@@ -17,10 +17,10 @@ set(MODULES
"ieee_features"
"iso_c_binding"
"iso_fortran_env"
- "omp_lib"
"__fortran_builtins"
"__fortran_type_info"
)
+#"omp_lib"
# Create module files directly from the top-level module source directory.
# If CMAKE_CROSSCOMPILING, then the newly built flang-new executable was
@@ -71,6 +71,22 @@ if (NOT CMAKE_CROSSCOMPILING)
list(APPEND MODULE_FILES ${base}.mod ${base}.f18.mod)
install(FILES ${base}.mod ${base}.f18.mod DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/flang")
endforeach()
+
+ # Special case for omp_lib.mod, because its source comes from openmp/runtime/src/include.
+ # It also produces to module files: omp_lib.mod and omp_lib_kinds.mod.
+ message("MK: ${CMAKE_BINARY_DIR}")
+ set(base ${FLANG_INTRINSIC_MODULES_DIR}/omp_lib)
+ add_custom_command(OUTPUT ${base}.mod
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${FLANG_INTRINSIC_MODULES_DIR}
+ COMMAND flang-new -cpp -fsyntax-only ${opts} -module-dir ${FLANG_INTRINSIC_MODULES_DIR}
+ ${CMAKE_BINARY_DIR}/projects/openmp/runtime/src/omp_lib.F90
+ DEPENDS flang-new ${CMAKE_BINARY_DIR}/projects/openmp/runtime/src/omp_lib.F90 ${depends}
+ )
+ add_custom_command(OUTPUT ${base}.f18.mod
+ DEPENDS ${base}.mod
+ COMMAND ${CMAKE_COMMAND} -E copy ${base}.mod ${base}.f18.mod)
+ list(APPEND MODULE_FILES ${base}.mod ${base}.f18.mod)
+ install(FILES ${base}.mod ${base}.f18.mod ${base}_kinds.mod ${base}_kinds.f18.mod DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/flang")
endif()
add_custom_target(module_files ALL DEPENDS ${MODULE_FILES})
@@ -86,6 +102,8 @@ if (NOT WIN32)
install(PROGRAMS ${CMAKE_BINARY_DIR}/bin/flang-to-external-fc DESTINATION "${CMAKE_INSTALL_BINDIR}")
endif()
+# TODO: Is this the right file coming from the OpenMP runtime or is this a copy of it?
# TODO Move this to a more suitable location
+#file(COPY ${FLANG_SOURCE_DIR}/module/omp_lib.h DESTINATION "${CMAKE_BINARY_DIR}/include/flang/OpenMP/" FILE_PERMISSIONS OWNER_READ OWNER_WRITE)
file(COPY ${FLANG_SOURCE_DIR}/module/omp_lib.h DESTINATION "${CMAKE_BINARY_DIR}/include/flang/OpenMP/" FILE_PERMISSIONS OWNER_READ OWNER_WRITE)
-install(FILES ${CMAKE_BINARY_DIR}/include/flang/OpenMP/omp_lib.h DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/flang/OpenMP")
+install(FILES ${CMAKE_BINARY_DIR}/projects/openmp/runtime/src/omp_lib.h DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/flang/OpenMP")
diff --git a/openmp/runtime/src/CMakeLists.txt b/openmp/runtime/src/CMakeLists.txt
index 7e2a05e003b8d9..54203730ecc91f 100644
--- a/openmp/runtime/src/CMakeLists.txt
+++ b/openmp/runtime/src/CMakeLists.txt
@@ -312,9 +312,10 @@ endif()
# Building the Fortran module files
# One compilation step creates both omp_lib.mod and omp_lib_kinds.mod
+configure_file(${LIBOMP_INC_DIR}/omp_lib.h.var omp_lib.h @ONLY)
+configure_file(${LIBOMP_INC_DIR}/omp_lib.F90.var omp_lib.F90 @ONLY)
+message("LIBOMP: produce omp_lib.h omp_lib.F90")
if(${LIBOMP_FORTRAN_MODULES})
- configure_file(${LIBOMP_INC_DIR}/omp_lib.h.var omp_lib.h @ONLY)
- configure_file(${LIBOMP_INC_DIR}/omp_lib.F90.var omp_lib.F90 @ONLY)
# Workaround for gfortran to build modules with the
# omp_sched_monotonic integer parameter
if (CMAKE_Fortran_COMPILER_ID STREQUAL "GNU")
>From ee7baef5bcd9205ffdbe7ce787eb1f0ff6542fa0 Mon Sep 17 00:00:00 2001
From: Michael Klemm <michael.klemm at amd.com>
Date: Thu, 8 Feb 2024 16:34:31 +0100
Subject: [PATCH 06/19] Add dependecy for ISO_S_BINDING, as needed by
omp_lib.mod
---
flang/tools/f18/CMakeLists.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/flang/tools/f18/CMakeLists.txt b/flang/tools/f18/CMakeLists.txt
index 8369eae39994d0..514fc6387addbb 100644
--- a/flang/tools/f18/CMakeLists.txt
+++ b/flang/tools/f18/CMakeLists.txt
@@ -80,7 +80,7 @@ if (NOT CMAKE_CROSSCOMPILING)
COMMAND ${CMAKE_COMMAND} -E make_directory ${FLANG_INTRINSIC_MODULES_DIR}
COMMAND flang-new -cpp -fsyntax-only ${opts} -module-dir ${FLANG_INTRINSIC_MODULES_DIR}
${CMAKE_BINARY_DIR}/projects/openmp/runtime/src/omp_lib.F90
- DEPENDS flang-new ${CMAKE_BINARY_DIR}/projects/openmp/runtime/src/omp_lib.F90 ${depends}
+ DEPENDS flang-new ${FLANG_INTRINSIC_MODULES_DIR}/iso_c_binding.mod ${CMAKE_BINARY_DIR}/projects/openmp/runtime/src/omp_lib.F90 ${depends}
)
add_custom_command(OUTPUT ${base}.f18.mod
DEPENDS ${base}.mod
>From 6aa43813c3f0d73dfd11f2edc6a27a90f251b0e9 Mon Sep 17 00:00:00 2001
From: Michael Klemm <michael.klemm at amd.com>
Date: Thu, 8 Feb 2024 16:49:00 +0100
Subject: [PATCH 07/19] Correct a few things about copying and installing files
---
flang/tools/f18/CMakeLists.txt | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/flang/tools/f18/CMakeLists.txt b/flang/tools/f18/CMakeLists.txt
index 514fc6387addbb..0e3cfbcfc00001 100644
--- a/flang/tools/f18/CMakeLists.txt
+++ b/flang/tools/f18/CMakeLists.txt
@@ -59,6 +59,7 @@ if (NOT CMAKE_CROSSCOMPILING)
endif()
endif()
+ # TODO: We may need to flag this with conditional, in case Flang is built w/o OpenMP support
add_custom_command(OUTPUT ${base}.mod
COMMAND ${CMAKE_COMMAND} -E make_directory ${FLANG_INTRINSIC_MODULES_DIR}
COMMAND flang-new -cpp -fsyntax-only ${opts} -module-dir ${FLANG_INTRINSIC_MODULES_DIR}
@@ -85,7 +86,10 @@ if (NOT CMAKE_CROSSCOMPILING)
add_custom_command(OUTPUT ${base}.f18.mod
DEPENDS ${base}.mod
COMMAND ${CMAKE_COMMAND} -E copy ${base}.mod ${base}.f18.mod)
- list(APPEND MODULE_FILES ${base}.mod ${base}.f18.mod)
+ add_custom_command(OUTPUT ${base}_kinds.f18.mod
+ DEPENDS ${base}.mod
+ COMMAND ${CMAKE_COMMAND} -E copy ${base}_kinds.mod ${base}_kinds.f18.mod)
+ list(APPEND MODULE_FILES ${base}.mod ${base}.f18.mod ${base}_kinds.mod ${base}_kinds.f18.mod)
install(FILES ${base}.mod ${base}.f18.mod ${base}_kinds.mod ${base}_kinds.f18.mod DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/flang")
endif()
@@ -105,5 +109,6 @@ endif()
# TODO: Is this the right file coming from the OpenMP runtime or is this a copy of it?
# TODO Move this to a more suitable location
#file(COPY ${FLANG_SOURCE_DIR}/module/omp_lib.h DESTINATION "${CMAKE_BINARY_DIR}/include/flang/OpenMP/" FILE_PERMISSIONS OWNER_READ OWNER_WRITE)
-file(COPY ${FLANG_SOURCE_DIR}/module/omp_lib.h DESTINATION "${CMAKE_BINARY_DIR}/include/flang/OpenMP/" FILE_PERMISSIONS OWNER_READ OWNER_WRITE)
-install(FILES ${CMAKE_BINARY_DIR}/projects/openmp/runtime/src/omp_lib.h DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/flang/OpenMP")
+file(COPY ${CMAKE_BINARY_DIR}/projects/openmp/runtime/src/omp_lib.h DESTINATION "${CMAKE_BINARY_DIR}/include/flang/OpenMP/" FILE_PERMISSIONS OWNER_READ OWNER_WRITE)
+install(FILES ${CMAKE_BINARY_DIR}/include/flang/OpenMP/omp_lib.h DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/flang/OpenMP")
+
>From 29eb7a4f1e4de7927f8b30f56f60f4640dd3aa9d Mon Sep 17 00:00:00 2001
From: Michael Klemm <michael.klemm at amd.com>
Date: Tue, 20 Feb 2024 15:18:27 +0100
Subject: [PATCH 08/19] Add missing generated dependence
---
flang/tools/f18/CMakeLists.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/flang/tools/f18/CMakeLists.txt b/flang/tools/f18/CMakeLists.txt
index 0e3cfbcfc00001..a867edb8b4a493 100644
--- a/flang/tools/f18/CMakeLists.txt
+++ b/flang/tools/f18/CMakeLists.txt
@@ -77,7 +77,7 @@ if (NOT CMAKE_CROSSCOMPILING)
# It also produces to module files: omp_lib.mod and omp_lib_kinds.mod.
message("MK: ${CMAKE_BINARY_DIR}")
set(base ${FLANG_INTRINSIC_MODULES_DIR}/omp_lib)
- add_custom_command(OUTPUT ${base}.mod
+ add_custom_command(OUTPUT ${base}.mod ${base}_kinds.mod
COMMAND ${CMAKE_COMMAND} -E make_directory ${FLANG_INTRINSIC_MODULES_DIR}
COMMAND flang-new -cpp -fsyntax-only ${opts} -module-dir ${FLANG_INTRINSIC_MODULES_DIR}
${CMAKE_BINARY_DIR}/projects/openmp/runtime/src/omp_lib.F90
>From 6b32f374cf818e6669b0404bea1efe31d5b23330 Mon Sep 17 00:00:00 2001
From: Michael Klemm <michael.klemm at amd.com>
Date: Tue, 20 Feb 2024 15:18:42 +0100
Subject: [PATCH 09/19] Cleanup CMake debugging code
---
flang/tools/f18/CMakeLists.txt | 2 --
1 file changed, 2 deletions(-)
diff --git a/flang/tools/f18/CMakeLists.txt b/flang/tools/f18/CMakeLists.txt
index a867edb8b4a493..396c85df150229 100644
--- a/flang/tools/f18/CMakeLists.txt
+++ b/flang/tools/f18/CMakeLists.txt
@@ -20,7 +20,6 @@ set(MODULES
"__fortran_builtins"
"__fortran_type_info"
)
-#"omp_lib"
# Create module files directly from the top-level module source directory.
# If CMAKE_CROSSCOMPILING, then the newly built flang-new executable was
@@ -75,7 +74,6 @@ if (NOT CMAKE_CROSSCOMPILING)
# Special case for omp_lib.mod, because its source comes from openmp/runtime/src/include.
# It also produces to module files: omp_lib.mod and omp_lib_kinds.mod.
- message("MK: ${CMAKE_BINARY_DIR}")
set(base ${FLANG_INTRINSIC_MODULES_DIR}/omp_lib)
add_custom_command(OUTPUT ${base}.mod ${base}_kinds.mod
COMMAND ${CMAKE_COMMAND} -E make_directory ${FLANG_INTRINSIC_MODULES_DIR}
>From cae882da0b82f8dc993c42572f1353068399dffe Mon Sep 17 00:00:00 2001
From: Michael Klemm <michael.klemm at amd.com>
Date: Wed, 21 Feb 2024 10:12:24 +0100
Subject: [PATCH 10/19] Correct USE statements for OpenMP API routines
---
openmp/runtime/src/include/omp_lib.F90.var | 21 +++++++++++----------
1 file changed, 11 insertions(+), 10 deletions(-)
diff --git a/openmp/runtime/src/include/omp_lib.F90.var b/openmp/runtime/src/include/omp_lib.F90.var
index 68799fc52ff020..14670f9082cf1d 100644
--- a/openmp/runtime/src/include/omp_lib.F90.var
+++ b/openmp/runtime/src/include/omp_lib.F90.var
@@ -588,20 +588,20 @@
end subroutine omp_display_env
function omp_target_alloc(size, device_num) bind(c)
- use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_ptr, c_size_t, c_int
type(c_ptr) omp_target_alloc
integer(c_size_t), value :: size
integer(c_int), value :: device_num
end function omp_target_alloc
subroutine omp_target_free(device_ptr, device_num) bind(c)
- use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_ptr, c_int
type(c_ptr), value :: device_ptr
integer(c_int), value :: device_num
end subroutine omp_target_free
function omp_target_is_present(ptr, device_num) bind(c)
- use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_ptr, c_int
integer(c_int) omp_target_is_present
type(c_ptr), value :: ptr
integer(c_int), value :: device_num
@@ -609,7 +609,7 @@
function omp_target_memcpy(dst, src, length, dst_offset, src_offset, &
dst_device_num, src_device_num) bind(c)
- use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_ptr, c_size_t, c_int
integer(c_int) omp_target_memcpy
type(c_ptr), value :: dst, src
integer(c_size_t), value :: length, dst_offset, src_offset
@@ -619,7 +619,7 @@
function omp_target_memcpy_rect(dst, src, element_size, num_dims, &
volume, dst_offsets, src_offsets, dst_dimensions, &
src_dimensions, dst_device_num, src_device_num) bind(c)
- use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_ptr, c_size_t, c_int
integer(c_int) omp_target_memcpy_rect
type(c_ptr), value :: dst, src
integer(c_size_t), value :: element_size
@@ -632,6 +632,7 @@
src_offset, dst_device_num, src_device_num, depobj_count, &
depobj_list) bind(c)
use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_ptr, c_size_t, c_int
integer(c_int) omp_target_memcpy_async
type(c_ptr), value :: dst, src
integer(c_size_t), value :: length, dst_offset, src_offset
@@ -645,6 +646,7 @@
src_dimensions, dst_device_num, src_device_num, depobj_count, &
depobj_list) bind(c)
use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_ptr, c_size_t, c_int
integer(c_int) omp_target_memcpy_rect_async
type(c_ptr), value :: dst, src
integer(c_size_t), value :: element_size
@@ -666,8 +668,8 @@
function omp_target_memset_async(ptr, val, count, device_num, &
depobj_count, depobj_list) bind(c)
- use, intrinsic :: iso_c_binding, only : c_ptr, c_int, c_size_t
use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only : c_ptr, c_int, c_size_t
type(c_ptr) :: omp_target_memset_async
type(c_ptr), value :: ptr
integer(c_int), value :: val
@@ -679,7 +681,7 @@
function omp_target_associate_ptr(host_ptr, device_ptr, size, &
device_offset, device_num) bind(c)
- use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_ptr, c_size_t, c_int
integer(c_int) omp_target_associate_ptr
type(c_ptr), value :: host_ptr, device_ptr
integer(c_size_t), value :: size, device_offset
@@ -687,21 +689,20 @@
end function omp_target_associate_ptr
function omp_get_mapped_ptr(ptr, device_num) bind(c)
- use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_ptr, c_int
type(c_ptr) omp_get_mapped_ptr
type(c_ptr), value :: ptr
integer(c_int), value :: device_num
end function omp_get_mapped_ptr
function omp_target_disassociate_ptr(ptr, device_num) bind(c)
- use omp_lib_kinds
+ use, intrinsic :: iso_c_binding, only: c_ptr, c_int
integer(c_int) omp_target_disassociate_ptr
type(c_ptr), value :: ptr
integer(c_int), value :: device_num
end function omp_target_disassociate_ptr
function omp_target_is_accessible(ptr, size, device_num) bind(c)
- use omp_lib_kinds
use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t, c_int
integer(c_int) omp_target_is_accessible
type(c_ptr), value :: ptr
>From fb36811f07cd95c688140baf9e294d254bc66c37 Mon Sep 17 00:00:00 2001
From: Michael Klemm <michael.klemm at amd.com>
Date: Wed, 21 Feb 2024 10:41:41 +0100
Subject: [PATCH 11/19] Change default visibility to PRIVATE
---
openmp/runtime/src/include/omp_lib.F90.var | 279 +++++++++++----------
1 file changed, 144 insertions(+), 135 deletions(-)
diff --git a/openmp/runtime/src/include/omp_lib.F90.var b/openmp/runtime/src/include/omp_lib.F90.var
index 14670f9082cf1d..2fd61883879fa8 100644
--- a/openmp/runtime/src/include/omp_lib.F90.var
+++ b/openmp/runtime/src/include/omp_lib.F90.var
@@ -14,37 +14,42 @@
use, intrinsic :: iso_c_binding
- integer, parameter :: omp_integer_kind = c_int
- integer, parameter :: omp_logical_kind = 4
- integer, parameter :: omp_real_kind = c_float
- integer, parameter :: kmp_double_kind = c_double
- integer, parameter :: omp_lock_kind = c_intptr_t
- integer, parameter :: omp_nest_lock_kind = c_intptr_t
- integer, parameter :: omp_sched_kind = omp_integer_kind
- integer, parameter :: omp_proc_bind_kind = omp_integer_kind
- integer, parameter :: kmp_pointer_kind = c_intptr_t
- integer, parameter :: kmp_size_t_kind = c_size_t
- integer, parameter :: kmp_affinity_mask_kind = c_intptr_t
- integer, parameter :: kmp_cancel_kind = omp_integer_kind
- integer, parameter :: omp_sync_hint_kind = omp_integer_kind
- integer, parameter :: omp_lock_hint_kind = omp_sync_hint_kind
- integer, parameter :: omp_control_tool_kind = omp_integer_kind
- integer, parameter :: omp_control_tool_result_kind = omp_integer_kind
- integer, parameter :: omp_allocator_handle_kind = c_intptr_t
- integer, parameter :: omp_memspace_handle_kind = c_intptr_t
- integer, parameter :: omp_alloctrait_key_kind = omp_integer_kind
- integer, parameter :: omp_alloctrait_val_kind = c_intptr_t
- integer, parameter :: omp_interop_kind = c_intptr_t
- integer, parameter :: omp_interop_fr_kind = omp_integer_kind
+ ! Set PRIVATE by default to explicitly only export what is meant
+ ! to be exported by this MODULE.
+ private
+
+ integer, parameter, public :: omp_integer_kind = c_int
+ integer, parameter, public :: omp_logical_kind = 4
+ integer, parameter, public :: omp_real_kind = c_float
+ integer, parameter, public :: kmp_double_kind = c_double
+ integer, parameter, public :: omp_lock_kind = c_intptr_t
+ integer, parameter, public :: omp_nest_lock_kind = c_intptr_t
+ integer, parameter, public :: omp_sched_kind = omp_integer_kind
+ integer, parameter, public :: omp_proc_bind_kind = omp_integer_kind
+ integer, parameter, public :: kmp_pointer_kind = c_intptr_t
+ integer, parameter, public :: kmp_size_t_kind = c_size_t
+ integer, parameter, public :: kmp_affinity_mask_kind = c_intptr_t
+ integer, parameter, public :: kmp_cancel_kind = omp_integer_kind
+ integer, parameter, public :: omp_sync_hint_kind = omp_integer_kind
+ integer, parameter, public :: omp_lock_hint_kind = omp_sync_hint_kind
+ integer, parameter, public :: omp_control_tool_kind = omp_integer_kind
+ integer, parameter, public :: omp_control_tool_result_kind = omp_integer_kind
+ integer, parameter, public :: omp_allocator_handle_kind = c_intptr_t
+ integer, parameter, public :: omp_memspace_handle_kind = c_intptr_t
+ integer, parameter, public :: omp_alloctrait_key_kind = omp_integer_kind
+ integer, parameter, public :: omp_alloctrait_val_kind = c_intptr_t
+ integer, parameter, public :: omp_interop_kind = c_intptr_t
+ integer, parameter, public :: omp_interop_fr_kind = omp_integer_kind
type omp_alloctrait
integer(kind=omp_alloctrait_key_kind) key
integer(kind=omp_alloctrait_val_kind) value
end type omp_alloctrait
+ public :: omp_alloctrait
- integer, parameter :: omp_pause_resource_kind = omp_integer_kind
- integer, parameter :: omp_depend_kind = c_intptr_t
- integer, parameter :: omp_event_handle_kind = c_intptr_t
+ integer, parameter, public :: omp_pause_resource_kind = omp_integer_kind
+ integer, parameter, public :: omp_depend_kind = c_intptr_t
+ integer, parameter, public :: omp_event_handle_kind = c_intptr_t
end module omp_lib_kinds
@@ -52,119 +57,123 @@
use omp_lib_kinds
- integer (kind=omp_integer_kind), parameter :: openmp_version = @LIBOMP_OMP_YEAR_MONTH@
- integer (kind=omp_integer_kind), parameter :: kmp_version_major = @LIBOMP_VERSION_MAJOR@
- integer (kind=omp_integer_kind), parameter :: kmp_version_minor = @LIBOMP_VERSION_MINOR@
- integer (kind=omp_integer_kind), parameter :: kmp_version_build = @LIBOMP_VERSION_BUILD@
+ ! Set PRIVATE by default to explicitly only export what is meant
+ ! to be exported by this MODULE.
+ private
+
+ integer (kind=omp_integer_kind), parameter, public :: openmp_version = @LIBOMP_OMP_YEAR_MONTH@
+ integer (kind=omp_integer_kind), parameter, public :: kmp_version_major = @LIBOMP_VERSION_MAJOR@
+ integer (kind=omp_integer_kind), parameter, public :: kmp_version_minor = @LIBOMP_VERSION_MINOR@
+ integer (kind=omp_integer_kind), parameter, public :: kmp_version_build = @LIBOMP_VERSION_BUILD@
character(*) kmp_build_date
parameter( kmp_build_date = '@LIBOMP_BUILD_DATE@' )
- integer(kind=omp_sched_kind), parameter :: omp_sched_static = 1
- integer(kind=omp_sched_kind), parameter :: omp_sched_dynamic = 2
- integer(kind=omp_sched_kind), parameter :: omp_sched_guided = 3
- integer(kind=omp_sched_kind), parameter :: omp_sched_auto = 4
- integer(kind=omp_sched_kind), parameter :: omp_sched_monotonic = int(Z'80000000', kind=omp_sched_kind)
-
- integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_false = 0
- integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_true = 1
- integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_master = 2
- integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_close = 3
- integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_spread = 4
-
- integer (kind=kmp_cancel_kind), parameter :: kmp_cancel_parallel = 1
- integer (kind=kmp_cancel_kind), parameter :: kmp_cancel_loop = 2
- integer (kind=kmp_cancel_kind), parameter :: kmp_cancel_sections = 3
- integer (kind=kmp_cancel_kind), parameter :: kmp_cancel_taskgroup = 4
-
- integer (kind=omp_sync_hint_kind), parameter :: omp_sync_hint_none = 0
- integer (kind=omp_sync_hint_kind), parameter :: omp_sync_hint_uncontended = 1
- integer (kind=omp_sync_hint_kind), parameter :: omp_sync_hint_contended = 2
- integer (kind=omp_sync_hint_kind), parameter :: omp_sync_hint_nonspeculative = 4
- integer (kind=omp_sync_hint_kind), parameter :: omp_sync_hint_speculative = 8
- integer (kind=omp_lock_hint_kind), parameter :: omp_lock_hint_none = omp_sync_hint_none
- integer (kind=omp_lock_hint_kind), parameter :: omp_lock_hint_uncontended = omp_sync_hint_uncontended
- integer (kind=omp_lock_hint_kind), parameter :: omp_lock_hint_contended = omp_sync_hint_contended
- integer (kind=omp_lock_hint_kind), parameter :: omp_lock_hint_nonspeculative = omp_sync_hint_nonspeculative
- integer (kind=omp_lock_hint_kind), parameter :: omp_lock_hint_speculative = omp_sync_hint_speculative
- integer (kind=omp_lock_hint_kind), parameter :: kmp_lock_hint_hle = 65536
- integer (kind=omp_lock_hint_kind), parameter :: kmp_lock_hint_rtm = 131072
- integer (kind=omp_lock_hint_kind), parameter :: kmp_lock_hint_adaptive = 262144
-
- integer (kind=omp_control_tool_kind), parameter :: omp_control_tool_start = 1
- integer (kind=omp_control_tool_kind), parameter :: omp_control_tool_pause = 2
- integer (kind=omp_control_tool_kind), parameter :: omp_control_tool_flush = 3
- integer (kind=omp_control_tool_kind), parameter :: omp_control_tool_end = 4
-
- integer (kind=omp_control_tool_result_kind), parameter :: omp_control_tool_notool = -2
- integer (kind=omp_control_tool_result_kind), parameter :: omp_control_tool_nocallback = -1
- integer (kind=omp_control_tool_result_kind), parameter :: omp_control_tool_success = 0
- integer (kind=omp_control_tool_result_kind), parameter :: omp_control_tool_ignored = 1
-
- integer (kind=omp_alloctrait_key_kind), parameter :: omp_atk_sync_hint = 1
- integer (kind=omp_alloctrait_key_kind), parameter :: omp_atk_alignment = 2
- integer (kind=omp_alloctrait_key_kind), parameter :: omp_atk_access = 3
- integer (kind=omp_alloctrait_key_kind), parameter :: omp_atk_pool_size = 4
- integer (kind=omp_alloctrait_key_kind), parameter :: omp_atk_fallback = 5
- integer (kind=omp_alloctrait_key_kind), parameter :: omp_atk_fb_data = 6
- integer (kind=omp_alloctrait_key_kind), parameter :: omp_atk_pinned = 7
- integer (kind=omp_alloctrait_key_kind), parameter :: omp_atk_partition = 8
-
- integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_default = -1
- integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_false = 0
- integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_true = 1
- integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_contended = 3
- integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_uncontended = 4
- integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_serialized = 5
- integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_sequential = omp_atv_serialized
- integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_private = 6
- integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_all = 7
- integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_thread = 8
- integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_pteam = 9
- integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_cgroup = 10
- integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_default_mem_fb = 11
- integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_null_fb = 12
- integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_abort_fb = 13
- integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_allocator_fb = 14
- integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_environment = 15
- integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_nearest = 16
- integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_blocked = 17
- integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_interleaved = 18
-
- integer (kind=omp_allocator_handle_kind), parameter :: omp_null_allocator = 0
- integer (kind=omp_allocator_handle_kind), parameter :: omp_default_mem_alloc = 1
- integer (kind=omp_allocator_handle_kind), parameter :: omp_large_cap_mem_alloc = 2
- integer (kind=omp_allocator_handle_kind), parameter :: omp_const_mem_alloc = 3
- integer (kind=omp_allocator_handle_kind), parameter :: omp_high_bw_mem_alloc = 4
- integer (kind=omp_allocator_handle_kind), parameter :: omp_low_lat_mem_alloc = 5
- integer (kind=omp_allocator_handle_kind), parameter :: omp_cgroup_mem_alloc = 6
- integer (kind=omp_allocator_handle_kind), parameter :: omp_pteam_mem_alloc = 7
- integer (kind=omp_allocator_handle_kind), parameter :: omp_thread_mem_alloc = 8
- integer (kind=omp_allocator_handle_kind), parameter :: llvm_omp_target_host_mem_alloc = 100
- integer (kind=omp_allocator_handle_kind), parameter :: llvm_omp_target_shared_mem_alloc = 101
- integer (kind=omp_allocator_handle_kind), parameter :: llvm_omp_target_device_mem_alloc = 102
-
- integer (kind=omp_memspace_handle_kind), parameter :: omp_default_mem_space = 0
- integer (kind=omp_memspace_handle_kind), parameter :: omp_large_cap_mem_space = 1
- integer (kind=omp_memspace_handle_kind), parameter :: omp_const_mem_space = 2
- integer (kind=omp_memspace_handle_kind), parameter :: omp_high_bw_mem_space = 3
- integer (kind=omp_memspace_handle_kind), parameter :: omp_low_lat_mem_space = 4
- integer (kind=omp_memspace_handle_kind), parameter :: llvm_omp_target_host_mem_space = 100
- integer (kind=omp_memspace_handle_kind), parameter :: llvm_omp_target_shared_mem_space = 101
- integer (kind=omp_memspace_handle_kind), parameter :: llvm_omp_target_device_mem_space = 102
-
- integer (kind=omp_pause_resource_kind), parameter :: omp_pause_resume = 0
- integer (kind=omp_pause_resource_kind), parameter :: omp_pause_soft = 1
- integer (kind=omp_pause_resource_kind), parameter :: omp_pause_hard = 2
-
- integer (kind=omp_interop_fr_kind), parameter :: omp_ifr_cuda = 1
- integer (kind=omp_interop_fr_kind), parameter :: omp_ifr_cuda_driver = 2
- integer (kind=omp_interop_fr_kind), parameter :: omp_ifr_opencl = 3
- integer (kind=omp_interop_fr_kind), parameter :: omp_ifr_sycl = 4
- integer (kind=omp_interop_fr_kind), parameter :: omp_ifr_hip = 5
- integer (kind=omp_interop_fr_kind), parameter :: omp_ifr_level_zero = 6
- integer (kind=omp_interop_fr_kind), parameter :: omp_ifr_last = 7
-
- integer (kind=omp_interop_kind), parameter :: omp_interop_none = 0
+ integer(kind=omp_sched_kind), parameter, public :: omp_sched_static = 1
+ integer(kind=omp_sched_kind), parameter, public :: omp_sched_dynamic = 2
+ integer(kind=omp_sched_kind), parameter, public :: omp_sched_guided = 3
+ integer(kind=omp_sched_kind), parameter, public :: omp_sched_auto = 4
+ integer(kind=omp_sched_kind), parameter, public :: omp_sched_monotonic = int(Z'80000000', kind=omp_sched_kind)
+
+ integer (kind=omp_proc_bind_kind), parameter, public :: omp_proc_bind_false = 0
+ integer (kind=omp_proc_bind_kind), parameter, public :: omp_proc_bind_true = 1
+ integer (kind=omp_proc_bind_kind), parameter, public :: omp_proc_bind_master = 2
+ integer (kind=omp_proc_bind_kind), parameter, public :: omp_proc_bind_close = 3
+ integer (kind=omp_proc_bind_kind), parameter, public :: omp_proc_bind_spread = 4
+
+ integer (kind=kmp_cancel_kind), parameter, public :: kmp_cancel_parallel = 1
+ integer (kind=kmp_cancel_kind), parameter, public :: kmp_cancel_loop = 2
+ integer (kind=kmp_cancel_kind), parameter, public :: kmp_cancel_sections = 3
+ integer (kind=kmp_cancel_kind), parameter, public :: kmp_cancel_taskgroup = 4
+
+ integer (kind=omp_sync_hint_kind), parameter, public :: omp_sync_hint_none = 0
+ integer (kind=omp_sync_hint_kind), parameter, public :: omp_sync_hint_uncontended = 1
+ integer (kind=omp_sync_hint_kind), parameter, public :: omp_sync_hint_contended = 2
+ integer (kind=omp_sync_hint_kind), parameter, public :: omp_sync_hint_nonspeculative = 4
+ integer (kind=omp_sync_hint_kind), parameter, public :: omp_sync_hint_speculative = 8
+ integer (kind=omp_lock_hint_kind), parameter, public :: omp_lock_hint_none = omp_sync_hint_none
+ integer (kind=omp_lock_hint_kind), parameter, public :: omp_lock_hint_uncontended = omp_sync_hint_uncontended
+ integer (kind=omp_lock_hint_kind), parameter, public :: omp_lock_hint_contended = omp_sync_hint_contended
+ integer (kind=omp_lock_hint_kind), parameter, public :: omp_lock_hint_nonspeculative = omp_sync_hint_nonspeculative
+ integer (kind=omp_lock_hint_kind), parameter, public :: omp_lock_hint_speculative = omp_sync_hint_speculative
+ integer (kind=omp_lock_hint_kind), parameter, public :: kmp_lock_hint_hle = 65536
+ integer (kind=omp_lock_hint_kind), parameter, public :: kmp_lock_hint_rtm = 131072
+ integer (kind=omp_lock_hint_kind), parameter, public :: kmp_lock_hint_adaptive = 262144
+
+ integer (kind=omp_control_tool_kind), parameter, public :: omp_control_tool_start = 1
+ integer (kind=omp_control_tool_kind), parameter, public :: omp_control_tool_pause = 2
+ integer (kind=omp_control_tool_kind), parameter, public :: omp_control_tool_flush = 3
+ integer (kind=omp_control_tool_kind), parameter, public :: omp_control_tool_end = 4
+
+ integer (kind=omp_control_tool_result_kind), parameter, public :: omp_control_tool_notool = -2
+ integer (kind=omp_control_tool_result_kind), parameter, public :: omp_control_tool_nocallback = -1
+ integer (kind=omp_control_tool_result_kind), parameter, public :: omp_control_tool_success = 0
+ integer (kind=omp_control_tool_result_kind), parameter, public :: omp_control_tool_ignored = 1
+
+ integer (kind=omp_alloctrait_key_kind), parameter, public :: omp_atk_sync_hint = 1
+ integer (kind=omp_alloctrait_key_kind), parameter, public :: omp_atk_alignment = 2
+ integer (kind=omp_alloctrait_key_kind), parameter, public :: omp_atk_access = 3
+ integer (kind=omp_alloctrait_key_kind), parameter, public :: omp_atk_pool_size = 4
+ integer (kind=omp_alloctrait_key_kind), parameter, public :: omp_atk_fallback = 5
+ integer (kind=omp_alloctrait_key_kind), parameter, public :: omp_atk_fb_data = 6
+ integer (kind=omp_alloctrait_key_kind), parameter, public :: omp_atk_pinned = 7
+ integer (kind=omp_alloctrait_key_kind), parameter, public :: omp_atk_partition = 8
+
+ integer (kind=omp_alloctrait_val_kind), parameter, public :: omp_atv_default = -1
+ integer (kind=omp_alloctrait_val_kind), parameter, public :: omp_atv_false = 0
+ integer (kind=omp_alloctrait_val_kind), parameter, public :: omp_atv_true = 1
+ integer (kind=omp_alloctrait_val_kind), parameter, public :: omp_atv_contended = 3
+ integer (kind=omp_alloctrait_val_kind), parameter, public :: omp_atv_uncontended = 4
+ integer (kind=omp_alloctrait_val_kind), parameter, public :: omp_atv_serialized = 5
+ integer (kind=omp_alloctrait_val_kind), parameter, public :: omp_atv_sequential = omp_atv_serialized
+ integer (kind=omp_alloctrait_val_kind), parameter, public :: omp_atv_private = 6
+ integer (kind=omp_alloctrait_val_kind), parameter, public :: omp_atv_all = 7
+ integer (kind=omp_alloctrait_val_kind), parameter, public :: omp_atv_thread = 8
+ integer (kind=omp_alloctrait_val_kind), parameter, public :: omp_atv_pteam = 9
+ integer (kind=omp_alloctrait_val_kind), parameter, public :: omp_atv_cgroup = 10
+ integer (kind=omp_alloctrait_val_kind), parameter, public :: omp_atv_default_mem_fb = 11
+ integer (kind=omp_alloctrait_val_kind), parameter, public :: omp_atv_null_fb = 12
+ integer (kind=omp_alloctrait_val_kind), parameter, public :: omp_atv_abort_fb = 13
+ integer (kind=omp_alloctrait_val_kind), parameter, public :: omp_atv_allocator_fb = 14
+ integer (kind=omp_alloctrait_val_kind), parameter, public :: omp_atv_environment = 15
+ integer (kind=omp_alloctrait_val_kind), parameter, public :: omp_atv_nearest = 16
+ integer (kind=omp_alloctrait_val_kind), parameter, public :: omp_atv_blocked = 17
+ integer (kind=omp_alloctrait_val_kind), parameter, public :: omp_atv_interleaved = 18
+
+ integer (kind=omp_allocator_handle_kind), parameter, public :: omp_null_allocator = 0
+ integer (kind=omp_allocator_handle_kind), parameter, public :: omp_default_mem_alloc = 1
+ integer (kind=omp_allocator_handle_kind), parameter, public :: omp_large_cap_mem_alloc = 2
+ integer (kind=omp_allocator_handle_kind), parameter, public :: omp_const_mem_alloc = 3
+ integer (kind=omp_allocator_handle_kind), parameter, public :: omp_high_bw_mem_alloc = 4
+ integer (kind=omp_allocator_handle_kind), parameter, public :: omp_low_lat_mem_alloc = 5
+ integer (kind=omp_allocator_handle_kind), parameter, public :: omp_cgroup_mem_alloc = 6
+ integer (kind=omp_allocator_handle_kind), parameter, public :: omp_pteam_mem_alloc = 7
+ integer (kind=omp_allocator_handle_kind), parameter, public :: omp_thread_mem_alloc = 8
+ integer (kind=omp_allocator_handle_kind), parameter, public :: llvm_omp_target_host_mem_alloc = 100
+ integer (kind=omp_allocator_handle_kind), parameter, public :: llvm_omp_target_shared_mem_alloc = 101
+ integer (kind=omp_allocator_handle_kind), parameter, public :: llvm_omp_target_device_mem_alloc = 102
+
+ integer (kind=omp_memspace_handle_kind), parameter, public :: omp_default_mem_space = 0
+ integer (kind=omp_memspace_handle_kind), parameter, public :: omp_large_cap_mem_space = 1
+ integer (kind=omp_memspace_handle_kind), parameter, public :: omp_const_mem_space = 2
+ integer (kind=omp_memspace_handle_kind), parameter, public :: omp_high_bw_mem_space = 3
+ integer (kind=omp_memspace_handle_kind), parameter, public :: omp_low_lat_mem_space = 4
+ integer (kind=omp_memspace_handle_kind), parameter, public :: llvm_omp_target_host_mem_space = 100
+ integer (kind=omp_memspace_handle_kind), parameter, public :: llvm_omp_target_shared_mem_space = 101
+ integer (kind=omp_memspace_handle_kind), parameter, public :: llvm_omp_target_device_mem_space = 102
+
+ integer (kind=omp_pause_resource_kind), parameter, public :: omp_pause_resume = 0
+ integer (kind=omp_pause_resource_kind), parameter, public :: omp_pause_soft = 1
+ integer (kind=omp_pause_resource_kind), parameter, public :: omp_pause_hard = 2
+
+ integer (kind=omp_interop_fr_kind), parameter, public :: omp_ifr_cuda = 1
+ integer (kind=omp_interop_fr_kind), parameter, public :: omp_ifr_cuda_driver = 2
+ integer (kind=omp_interop_fr_kind), parameter, public :: omp_ifr_opencl = 3
+ integer (kind=omp_interop_fr_kind), parameter, public :: omp_ifr_sycl = 4
+ integer (kind=omp_interop_fr_kind), parameter, public :: omp_ifr_hip = 5
+ integer (kind=omp_interop_fr_kind), parameter, public :: omp_ifr_level_zero = 6
+ integer (kind=omp_interop_fr_kind), parameter, public :: omp_ifr_last = 7
+
+ integer (kind=omp_interop_kind), parameter, public :: omp_interop_none = 0
interface
>From ad4eb2bbad194742bc73086733abbb0f606596f0 Mon Sep 17 00:00:00 2001
From: Michael Klemm <michael.klemm at amd.com>
Date: Wed, 21 Feb 2024 16:55:32 +0100
Subject: [PATCH 12/19] Cleanup debugging code
---
openmp/runtime/src/CMakeLists.txt | 1 -
1 file changed, 1 deletion(-)
diff --git a/openmp/runtime/src/CMakeLists.txt b/openmp/runtime/src/CMakeLists.txt
index 54203730ecc91f..8a24bd150d5e4c 100644
--- a/openmp/runtime/src/CMakeLists.txt
+++ b/openmp/runtime/src/CMakeLists.txt
@@ -314,7 +314,6 @@ endif()
# One compilation step creates both omp_lib.mod and omp_lib_kinds.mod
configure_file(${LIBOMP_INC_DIR}/omp_lib.h.var omp_lib.h @ONLY)
configure_file(${LIBOMP_INC_DIR}/omp_lib.F90.var omp_lib.F90 @ONLY)
-message("LIBOMP: produce omp_lib.h omp_lib.F90")
if(${LIBOMP_FORTRAN_MODULES})
# Workaround for gfortran to build modules with the
# omp_sched_monotonic integer parameter
>From 544b5f65fddf45d194e71134656c7f9135ca7d72 Mon Sep 17 00:00:00 2001
From: Michael Klemm <michael.klemm at amd.com>
Date: Mon, 26 Feb 2024 20:51:18 +0100
Subject: [PATCH 13/19] Add proper PUBLIC statements of the OpenMP API
---
openmp/runtime/src/include/omp_lib.F90.var | 120 +++++++++++++++++++++
1 file changed, 120 insertions(+)
diff --git a/openmp/runtime/src/include/omp_lib.F90.var b/openmp/runtime/src/include/omp_lib.F90.var
index 2fd61883879fa8..e17db21b9368a4 100644
--- a/openmp/runtime/src/include/omp_lib.F90.var
+++ b/openmp/runtime/src/include/omp_lib.F90.var
@@ -930,4 +930,124 @@
end interface
+ ! make the above routine definitions public
+ public :: omp_set_num_threads
+ public :: omp_set_dynamic
+ public :: omp_set_nested
+ public :: omp_get_num_threads
+ public :: omp_get_max_threads
+ public :: omp_get_thread_num
+ public :: omp_get_num_procs
+ public :: omp_in_parallel
+ public :: omp_in_final
+ public :: omp_get_dynamic
+ public :: omp_get_nested
+ public :: omp_get_thread_limit
+ public :: omp_set_max_active_levels
+ public :: omp_get_max_active_levels
+ public :: omp_get_level
+ public :: omp_get_active_level
+ public :: omp_get_ancestor_thread_num
+ public :: omp_get_team_size
+ public :: omp_set_schedule
+ public :: omp_get_schedule
+ public :: omp_get_proc_bind
+ public :: omp_get_num_places
+ public :: omp_get_place_num_procs
+ public :: omp_get_place_proc_ids
+ public :: omp_get_place_num
+ public :: omp_get_partition_num_places
+ public :: omp_get_partition_place_nums
+ public :: omp_get_wtime
+ public :: omp_get_wtick
+ public :: omp_get_default_device
+ public :: omp_set_default_device
+ public :: omp_get_num_devices
+ public :: omp_get_num_teams
+ public :: omp_get_team_num
+ public :: omp_get_cancellation
+ public :: omp_is_initial_device
+ public :: omp_get_initial_device
+ public :: omp_get_device_num
+ public :: omp_pause_resource
+ public :: omp_pause_resource_all
+ public :: omp_get_supported_active_levels
+ public :: omp_fulfill_event
+ public :: omp_init_lock
+ public :: omp_destroy_lock
+ public :: omp_set_lock
+ public :: omp_unset_lock
+ public :: omp_test_lock
+ public :: omp_init_nest_lock
+ public :: omp_destroy_nest_lock
+ public :: omp_set_nest_lock
+ public :: omp_unset_nest_lock
+ public :: omp_test_nest_lock
+ public :: omp_get_max_task_priority
+ public :: omp_init_lock_with_hint
+ public :: omp_init_nest_lock_with_hint
+ public :: omp_control_tool
+ public :: omp_init_allocator
+ public :: omp_destroy_allocator
+ public :: omp_set_default_allocator
+ public :: omp_get_default_allocator
+ public :: omp_set_affinity_format
+ public :: omp_get_affinity_format
+ public :: omp_display_affinity
+ public :: omp_capture_affinity
+ public :: omp_set_num_teams
+ public :: omp_get_max_teams
+ public :: omp_set_teams_thread_limit
+ public :: omp_get_teams_thread_limit
+ public :: omp_display_env
+ public :: omp_target_alloc
+ public :: omp_target_free
+ public :: omp_target_is_present
+ public :: omp_target_memcpy
+ public :: omp_target_memcpy_rect
+ public :: omp_target_memcpy_async
+ public :: omp_target_memcpy_rect_async
+ public :: omp_target_memset
+ public :: omp_target_memset_async
+ public :: omp_target_associate_ptr
+ public :: omp_get_mapped_ptr
+ public :: omp_target_disassociate_ptr
+ public :: omp_target_is_accessible
+ public :: omp_alloc
+ public :: omp_aligned_alloc
+ public :: omp_calloc
+ public :: omp_aligned_calloc
+ public :: omp_realloc
+ public :: omp_free
+ public :: omp_in_explicit_task
+ public :: kmp_set_stacksize
+ public :: kmp_set_stacksize_s
+ public :: kmp_set_blocktime
+ public :: kmp_set_library_serial
+ public :: kmp_set_library_turnaround
+ public :: kmp_set_library_throughput
+ public :: kmp_set_library
+ public :: kmp_set_defaults
+ public :: kmp_get_stacksize
+ public :: kmp_get_stacksize_s
+ public :: kmp_get_blocktime
+ public :: kmp_get_library
+ public :: kmp_set_disp_num_buffers
+ public :: kmp_set_affinity
+ public :: kmp_get_affinity
+ public :: kmp_get_affinity_max_proc
+ public :: kmp_create_affinity_mask
+ public :: kmp_destroy_affinity_mask
+ public :: kmp_set_affinity_mask_proc
+ public :: kmp_unset_affinity_mask_proc
+ public :: kmp_get_affinity_mask_proc
+ public :: kmp_malloc
+ public :: kmp_aligned_malloc
+ public :: kmp_calloc
+ public :: kmp_realloc
+ public :: kmp_free
+ public :: kmp_set_warnings_on
+ public :: kmp_set_warnings_off
+ public :: kmp_get_cancellation_status
+
end module omp_lib
>From ceb78f8765cfc43b34d380c6cab1cd97cb71dfc1 Mon Sep 17 00:00:00 2001
From: Michael Klemm <michael.klemm at amd.com>
Date: Mon, 26 Feb 2024 20:53:48 +0100
Subject: [PATCH 14/19] Fix typo
---
openmp/runtime/src/CMakeLists.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/openmp/runtime/src/CMakeLists.txt b/openmp/runtime/src/CMakeLists.txt
index 8a24bd150d5e4c..595545220c1e53 100644
--- a/openmp/runtime/src/CMakeLists.txt
+++ b/openmp/runtime/src/CMakeLists.txt
@@ -18,7 +18,7 @@ if(${LIBOMP_OMPT_SUPPORT})
configure_file(${LIBOMP_INC_DIR}/omp-tools.h.var omp-tools.h @ONLY)
endif()
-# Generate message catalog fioles: kmp_i18n_id.inc and kmp_i18n_default.inc
+# Generate message catalog files: kmp_i18n_id.inc and kmp_i18n_default.inc
add_custom_command(
OUTPUT kmp_i18n_id.inc
COMMAND ${PERL_EXECUTABLE} ${LIBOMP_TOOLS_DIR}/message-converter.pl --os=${LIBOMP_PERL_SCRIPT_OS}
>From acb6299f4d9657cf35fa4114c497926161edbc41 Mon Sep 17 00:00:00 2001
From: Michael Klemm <michael.klemm at amd.com>
Date: Wed, 28 Feb 2024 17:29:01 +0100
Subject: [PATCH 15/19] Re-export definitions of omp_lib_kinds
---
openmp/runtime/src/include/omp_lib.F90.var | 28 ++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/openmp/runtime/src/include/omp_lib.F90.var b/openmp/runtime/src/include/omp_lib.F90.var
index e17db21b9368a4..63a3c93b8d9296 100644
--- a/openmp/runtime/src/include/omp_lib.F90.var
+++ b/openmp/runtime/src/include/omp_lib.F90.var
@@ -61,6 +61,34 @@
! to be exported by this MODULE.
private
+ ! Re-export definitions in omp_lib_kinds
+ public :: omp_integer_kind
+ public :: omp_logical_kind
+ public :: omp_real_kind
+ public :: kmp_double_kind
+ public :: omp_lock_kind
+ public :: omp_nest_lock_kind
+ public :: omp_sched_kind
+ public :: omp_proc_bind_kind
+ public :: kmp_pointer_kind
+ public :: kmp_size_t_kind
+ public :: kmp_affinity_mask_kind
+ public :: kmp_cancel_kind
+ public :: omp_sync_hint_kind
+ public :: omp_lock_hint_kind
+ public :: omp_control_tool_kind
+ public :: omp_control_tool_result_kind
+ public :: omp_allocator_handle_kind
+ public :: omp_memspace_handle_kind
+ public :: omp_alloctrait_key_kind
+ public :: omp_alloctrait_val_kind
+ public :: omp_interop_kind
+ public :: omp_interop_fr_kind
+ public :: omp_alloctrait
+ public :: omp_pause_resource_kind
+ public :: omp_depend_kind
+ public :: omp_event_handle_kind
+
integer (kind=omp_integer_kind), parameter, public :: openmp_version = @LIBOMP_OMP_YEAR_MONTH@
integer (kind=omp_integer_kind), parameter, public :: kmp_version_major = @LIBOMP_VERSION_MAJOR@
integer (kind=omp_integer_kind), parameter, public :: kmp_version_minor = @LIBOMP_VERSION_MINOR@
>From 14593438f6f60053b08763ccfe1db3043269db7d Mon Sep 17 00:00:00 2001
From: Michael Klemm <michael.klemm at amd.com>
Date: Wed, 28 Feb 2024 16:53:22 +0100
Subject: [PATCH 16/19] Guard !$DIR for Intel compiler in omp_lib.h
---
openmp/runtime/src/include/omp_lib.h.var | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/openmp/runtime/src/include/omp_lib.h.var b/openmp/runtime/src/include/omp_lib.h.var
index 617f2321676dee..a709a2f298f8c8 100644
--- a/openmp/runtime/src/include/omp_lib.h.var
+++ b/openmp/runtime/src/include/omp_lib.h.var
@@ -486,82 +486,102 @@
end subroutine omp_fulfill_event
subroutine omp_init_lock(svar) bind(c)
+#ifdef __INTEL_COMPILER
!DIR$ IF(__INTEL_COMPILER.GE.1400)
!DIR$ attributes known_intrinsic :: omp_init_lock
!DIR$ ENDIF
+#endif
import
integer (kind=omp_lock_kind) svar
end subroutine omp_init_lock
subroutine omp_destroy_lock(svar) bind(c)
+#ifdef __INTEL_COMPILER
!DIR$ IF(__INTEL_COMPILER.GE.1400)
!DIR$ attributes known_intrinsic :: omp_destroy_lock
!DIR$ ENDIF
+#endif
import
integer (kind=omp_lock_kind) svar
end subroutine omp_destroy_lock
subroutine omp_set_lock(svar) bind(c)
+#ifdef __INTEL_COMPILER
!DIR$ IF(__INTEL_COMPILER.GE.1400)
!DIR$ attributes known_intrinsic :: omp_set_lock
!DIR$ ENDIF
+#endif
import
integer (kind=omp_lock_kind) svar
end subroutine omp_set_lock
subroutine omp_unset_lock(svar) bind(c)
+#ifdef __INTEL_COMPILER
!DIR$ IF(__INTEL_COMPILER.GE.1400)
!DIR$ attributes known_intrinsic :: omp_unset_lock
!DIR$ ENDIF
+#endif
import
integer (kind=omp_lock_kind) svar
end subroutine omp_unset_lock
function omp_test_lock(svar) bind(c)
+#ifdef __INTEL_COMPILER
!DIR$ IF(__INTEL_COMPILER.GE.1400)
!DIR$ attributes known_intrinsic :: omp_test_lock
!DIR$ ENDIF
+#endif
import
logical (kind=omp_logical_kind) omp_test_lock
integer (kind=omp_lock_kind) svar
end function omp_test_lock
subroutine omp_init_nest_lock(nvar) bind(c)
+#ifdef __INTEL_COMPILER
!DIR$ IF(__INTEL_COMPILER.GE.1400)
!DIR$ attributes known_intrinsic :: omp_init_nest_lock
!DIR$ ENDIF
+#endif
import
integer (kind=omp_nest_lock_kind) nvar
end subroutine omp_init_nest_lock
subroutine omp_destroy_nest_lock(nvar) bind(c)
+#ifdef __INTEL_COMPILER
!DIR$ IF(__INTEL_COMPILER.GE.1400)
!DIR$ attributes known_intrinsic :: omp_destroy_nest_lock
!DIR$ ENDIF
+#endif
import
integer (kind=omp_nest_lock_kind) nvar
end subroutine omp_destroy_nest_lock
subroutine omp_set_nest_lock(nvar) bind(c)
+#ifdef __INTEL_COMPILER
!DIR$ IF(__INTEL_COMPILER.GE.1400)
!DIR$ attributes known_intrinsic :: omp_set_nest_lock
!DIR$ ENDIF
+#endif
import
integer (kind=omp_nest_lock_kind) nvar
end subroutine omp_set_nest_lock
subroutine omp_unset_nest_lock(nvar) bind(c)
+#ifdef __INTEL_COMPILER
!DIR$ IF(__INTEL_COMPILER.GE.1400)
!DIR$ attributes known_intrinsic :: omp_unset_nest_lock
!DIR$ ENDIF
+#endif
import
integer (kind=omp_nest_lock_kind) nvar
end subroutine omp_unset_nest_lock
function omp_test_nest_lock(nvar) bind(c)
+#ifdef __INTEL_COMPILER
!DIR$ IF(__INTEL_COMPILER.GE.1400)
!DIR$ attributes known_intrinsic :: omp_test_nest_lock
!DIR$ ENDIF
+#endif
import
integer (kind=omp_integer_kind) omp_test_nest_lock
integer (kind=omp_nest_lock_kind) nvar
@@ -990,6 +1010,7 @@
end subroutine kmp_set_warnings_off
end interface
+#ifdef __INTEL_COMPILER
!DIR$ IF DEFINED (__INTEL_OFFLOAD)
!DIR$ IF(__INTEL_COMPILER.LT.1900)
@@ -1158,3 +1179,4 @@
!$omp declare target(omp_init_nest_lock_with_hint )
!DIR$ ENDIF
!DIR$ ENDIF
+#endif
>From 8dee6022c2c16f83b4443ff27eec22b4f6918d52 Mon Sep 17 00:00:00 2001
From: Michael Klemm <michael.klemm at amd.com>
Date: Wed, 28 Feb 2024 16:52:48 +0100
Subject: [PATCH 17/19] Add -cpp to include-omp-header.f90 test
---
flang/test/Driver/include-omp-header.f90 | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/flang/test/Driver/include-omp-header.f90 b/flang/test/Driver/include-omp-header.f90
index 4bf43bbc882bb4..b716f8ace60ce9 100644
--- a/flang/test/Driver/include-omp-header.f90
+++ b/flang/test/Driver/include-omp-header.f90
@@ -7,11 +7,11 @@
! This should just work
! RUN: not rm omp_lib.h
-! RUN: %flang -fsyntax-only -fopenmp %s 2>&1
+! RUN: %flang -cpp -fsyntax-only -fopenmp %s 2>&1
! Create an empty omp_lib.h header that _does not_ define omp_default_mem_alloc - this should lead to semantic errors
! RUN: touch omp_lib.h
-! RUN: not %flang -fsyntax-only -fopenmp %s 2>&1 | FileCheck %s
+! RUN: not %flang -cpp -fsyntax-only -fopenmp %s 2>&1 | FileCheck %s
! RUN: rm omp_lib.h
! CHECK: error: Must have INTEGER type, but is REAL(4)
>From 1cd971b8160ed00c29993eb1d7f60169526b512b Mon Sep 17 00:00:00 2001
From: Michael Klemm <michael.klemm at amd.com>
Date: Wed, 28 Feb 2024 15:11:50 +0100
Subject: [PATCH 18/19] Correct atomic-write.f90 test case correctly refer to
register
---
flang/test/Lower/OpenMP/atomic-write.f90 | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/flang/test/Lower/OpenMP/atomic-write.f90 b/flang/test/Lower/OpenMP/atomic-write.f90
index 119f60c1a92f56..e87a2300f55f54 100644
--- a/flang/test/Lower/OpenMP/atomic-write.f90
+++ b/flang/test/Lower/OpenMP/atomic-write.f90
@@ -21,8 +21,8 @@
!CHECK: %[[Z_VAL:.*]] = fir.load %[[Z_DECL]]#0 : !fir.ref<i32>
!CHECK: %[[C2:.*]] = arith.constant 2 : i32
!CHECK: %[[Z_DIV_2:.*]] = arith.divsi %[[Z_VAL]], %[[C2]] : i32
-!CHECK: %172 = arith.addi %[[TEN_X]], %[[Z_DIV_2]] : i32
-!CHECK: omp.atomic.write %163#1 = %172 hint(speculative) memory_order(release) : !fir.ref<i32>, i32
+!CHECK: %[[ADD_RES:.*]] = arith.addi %[[TEN_X]], %[[Z_DIV_2]] : i32
+!CHECK: omp.atomic.write %[[Y_DECL]]#1 = %[[ADD_RES]] hint(speculative) memory_order(release) : !fir.ref<i32>, i32
program OmpAtomicWrite
use omp_lib
>From 76ecc360a24ba783e4aa869d8ade83fb80b2839b Mon Sep 17 00:00:00 2001
From: Michael Klemm <michael.klemm at amd.com>
Date: Wed, 28 Feb 2024 15:59:22 +0100
Subject: [PATCH 19/19] Fix inconsistency in test cases (kind=8, wrong
constants)
---
.../test/Lower/OpenMP/FIR/parallel-sections.f90 | 16 ++++++++--------
flang/test/Lower/OpenMP/FIR/parallel.f90 | 8 ++++----
flang/test/Lower/OpenMP/FIR/sections.f90 | 4 ++--
flang/test/Lower/OpenMP/FIR/single.f90 | 2 +-
flang/test/Lower/OpenMP/FIR/task.f90 | 4 ++--
flang/test/Lower/OpenMP/FIR/taskgroup.f90 | 4 ++--
flang/test/Lower/OpenMP/FIR/teams.f90 | 3 ++-
flang/test/Lower/OpenMP/parallel-sections.f90 | 8 ++++----
flang/test/Lower/OpenMP/parallel.f90 | 4 ++--
flang/test/Lower/OpenMP/sections.f90 | 4 ++--
flang/test/Lower/OpenMP/single.f90 | 2 +-
flang/test/Lower/OpenMP/task.f90 | 4 ++--
flang/test/Lower/OpenMP/taskgroup.f90 | 4 ++--
flang/test/Lower/OpenMP/teams.f90 | 2 +-
flang/test/Parser/OpenMP/allocate-tree.f90 | 6 +++---
15 files changed, 38 insertions(+), 37 deletions(-)
diff --git a/flang/test/Lower/OpenMP/FIR/parallel-sections.f90 b/flang/test/Lower/OpenMP/FIR/parallel-sections.f90
index 33fda178323f2b..be9505f1b047c1 100644
--- a/flang/test/Lower/OpenMP/FIR/parallel-sections.f90
+++ b/flang/test/Lower/OpenMP/FIR/parallel-sections.f90
@@ -38,16 +38,16 @@ end subroutine omp_parallel_sections
subroutine omp_parallel_sections_allocate(x, y)
use omp_lib
integer, intent(inout) :: x, y
- !FIRDialect: %[[allocator_1:.*]] = arith.constant 1 : i32
- !FIRDialect: %[[allocator_2:.*]] = arith.constant 1 : i32
- !LLVMDialect: %[[allocator_1:.*]] = llvm.mlir.constant(1 : i32) : i32
- !LLVMDialect: %[[allocator_2:.*]] = llvm.mlir.constant(1 : i32) : i32
+ !FIRDialect: %[[allocator_1:.*]] = arith.constant 4 : i64
+ !FIRDialect: %[[allocator_2:.*]] = arith.constant 4 : i64
+ !LLVMDialect: %[[allocator_1:.*]] = llvm.mlir.constant(4 : i64) : i64
+ !LLVMDialect: %[[allocator_2:.*]] = llvm.mlir.constant(4 : i64) : i64
!OMPDialect: omp.parallel allocate(
- !FIRDialect: %[[allocator_2]] : i32 -> %{{.*}} : !fir.ref<i32>) {
- !LLVMDialect: %[[allocator_2]] : i32 -> %{{.*}} : !llvm.ptr) {
+ !FIRDialect: %[[allocator_2]] : i64 -> %{{.*}} : !fir.ref<i32>) {
+ !LLVMDialect: %[[allocator_2]] : i64 -> %{{.*}} : !llvm.ptr) {
!OMPDialect: omp.sections allocate(
- !FIRDialect: %[[allocator_1]] : i32 -> %{{.*}} : !fir.ref<i32>) {
- !LLVMDialect: %[[allocator_1]] : i32 -> %{{.*}} : !llvm.ptr) {
+ !FIRDialect: %[[allocator_1]] : i64 -> %{{.*}} : !fir.ref<i32>) {
+ !LLVMDialect: %[[allocator_1]] : i64 -> %{{.*}} : !llvm.ptr) {
!$omp parallel sections allocate(omp_high_bw_mem_alloc: x)
!OMPDialect: omp.section {
!$omp section
diff --git a/flang/test/Lower/OpenMP/FIR/parallel.f90 b/flang/test/Lower/OpenMP/FIR/parallel.f90
index b68551df234161..b56b58d188bb7f 100644
--- a/flang/test/Lower/OpenMP/FIR/parallel.f90
+++ b/flang/test/Lower/OpenMP/FIR/parallel.f90
@@ -153,8 +153,8 @@ subroutine parallel_allocate()
use omp_lib
integer :: x
!OMPDialect: omp.parallel allocate(
- !FIRDialect: %{{.+}} : i32 -> %{{.+}} : !fir.ref<i32>
- !LLVMDialect: %{{.+}} : i32 -> %{{.+}} : !llvm.ptr
+ !FIRDialect: %{{.+}} : i64 -> %{{.+}} : !fir.ref<i32>
+ !LLVMDialect: %{{.+}} : i64 -> %{{.+}} : !llvm.ptr
!OMPDialect: ) {
!$omp parallel allocate(omp_high_bw_mem_alloc: x) private(x)
!FIRDialect: arith.addi
@@ -195,8 +195,8 @@ subroutine parallel_multiple_clauses(alpha, num_threads)
!$omp end parallel
!OMPDialect: omp.parallel if({{.*}} : i1) num_threads({{.*}} : i32) allocate(
- !FIRDialect: %{{.+}} : i32 -> %{{.+}} : !fir.ref<i32>
- !LLVMDialect: %{{.+}} : i32 -> %{{.+}} : !llvm.ptr
+ !FIRDialect: %{{.+}} : i64 -> %{{.+}} : !fir.ref<i32>
+ !LLVMDialect: %{{.+}} : i64 -> %{{.+}} : !llvm.ptr
!OMPDialect: ) {
!$omp parallel num_threads(num_threads) if(alpha .le. 0) allocate(omp_high_bw_mem_alloc: alpha) private(alpha)
!FIRDialect: fir.call
diff --git a/flang/test/Lower/OpenMP/FIR/sections.f90 b/flang/test/Lower/OpenMP/FIR/sections.f90
index 640ec34a05bc21..e5632e23c2fc4d 100644
--- a/flang/test/Lower/OpenMP/FIR/sections.f90
+++ b/flang/test/Lower/OpenMP/FIR/sections.f90
@@ -5,8 +5,8 @@
!CHECK: func @_QQmain() attributes {fir.bindc_name = "sample"} {
!CHECK: %[[COUNT:.*]] = fir.address_of(@_QFEcount) : !fir.ref<i32>
!CHECK: %[[ETA:.*]] = fir.alloca f32 {bindc_name = "eta", uniq_name = "_QFEeta"}
-!CHECK: %[[CONST_1:.*]] = arith.constant 1 : i32
-!CHECK: omp.sections allocate(%[[CONST_1]] : i32 -> %0 : !fir.ref<i32>) {
+!CHECK: %[[CONST_1:.*]] = arith.constant 4 : i64
+!CHECK: omp.sections allocate(%[[CONST_1]] : i64 -> %0 : !fir.ref<i32>) {
!CHECK: omp.section {
!CHECK: %[[PRIVATE_ETA:.*]] = fir.alloca f32 {bindc_name = "eta", pinned, uniq_name = "_QFEeta"}
!CHECK: %[[PRIVATE_DOUBLE_COUNT:.*]] = fir.alloca i32 {bindc_name = "double_count", pinned, uniq_name = "_QFEdouble_count"}
diff --git a/flang/test/Lower/OpenMP/FIR/single.f90 b/flang/test/Lower/OpenMP/FIR/single.f90
index 266f6d94c60db4..168540b343b73b 100644
--- a/flang/test/Lower/OpenMP/FIR/single.f90
+++ b/flang/test/Lower/OpenMP/FIR/single.f90
@@ -55,7 +55,7 @@ subroutine single_allocate()
integer :: x
!CHECK: omp.parallel {
!$omp parallel
- !CHECK: omp.single allocate(%{{.+}} : i32 -> %{{.+}} : !fir.ref<i32>) {
+ !CHECK: omp.single allocate(%{{.+}} : i64 -> %{{.+}} : !fir.ref<i32>) {
!$omp single allocate(omp_high_bw_mem_alloc: x) private(x)
!CHECK: arith.addi
x = x + 12
diff --git a/flang/test/Lower/OpenMP/FIR/task.f90 b/flang/test/Lower/OpenMP/FIR/task.f90
index 4e7e54588c796f..0d2880f2de1091 100644
--- a/flang/test/Lower/OpenMP/FIR/task.f90
+++ b/flang/test/Lower/OpenMP/FIR/task.f90
@@ -63,7 +63,7 @@ end subroutine omp_task_priority
subroutine task_allocate()
use omp_lib
integer :: x
- !CHECK: omp.task allocate(%{{.+}} : i32 -> %{{.+}} : !fir.ref<i32>) {
+ !CHECK: omp.task allocate(%{{.+}} : i64 -> %{{.+}} : !fir.ref<i32>) {
!$omp task allocate(omp_high_bw_mem_alloc: x) private(x)
!CHECK: arith.addi
x = x + 12
@@ -217,7 +217,7 @@ subroutine task_multiple_clauses()
integer :: x, y, z
logical :: buzz
- !CHECK: omp.task if(%{{.+}}) final(%{{.+}}) priority(%{{.+}}) allocate(%{{.+}} : i32 -> %{{.+}} : !fir.ref<i32>) {
+ !CHECK: omp.task if(%{{.+}}) final(%{{.+}}) priority(%{{.+}}) allocate(%{{.+}} : i64 -> %{{.+}} : !fir.ref<i32>) {
!$omp task if(buzz) final(buzz) priority(z) allocate(omp_high_bw_mem_alloc: x) private(x) firstprivate(y)
!CHECK: %[[x_priv:.+]] = fir.alloca i32
diff --git a/flang/test/Lower/OpenMP/FIR/taskgroup.f90 b/flang/test/Lower/OpenMP/FIR/taskgroup.f90
index 55aba3ddb6c20c..035278ffc9dfb2 100644
--- a/flang/test/Lower/OpenMP/FIR/taskgroup.f90
+++ b/flang/test/Lower/OpenMP/FIR/taskgroup.f90
@@ -5,9 +5,9 @@ subroutine omp_taskgroup
use omp_lib
integer :: allocated_x
!CHECK-DAG: %{{.*}} = fir.alloca i32 {bindc_name = "allocated_x", uniq_name = "_QFomp_taskgroupEallocated_x"}
-!CHECK-DAG: %{{.*}} = arith.constant 1 : i32
+!CHECK-DAG: %{{.*}} = arith.constant 4 : i64
-!CHECK: omp.taskgroup allocate(%{{.*}} : i32 -> %0 : !fir.ref<i32>)
+!CHECK: omp.taskgroup allocate(%{{.*}} : i64 -> %0 : !fir.ref<i32>)
!$omp taskgroup allocate(omp_high_bw_mem_alloc: allocated_x)
!$omp task
!CHECK: fir.call @_QPwork() {{.*}}: () -> ()
diff --git a/flang/test/Lower/OpenMP/FIR/teams.f90 b/flang/test/Lower/OpenMP/FIR/teams.f90
index 51f9087acb0b59..27e4e95eed5e38 100644
--- a/flang/test/Lower/OpenMP/FIR/teams.f90
+++ b/flang/test/Lower/OpenMP/FIR/teams.f90
@@ -104,8 +104,9 @@ end subroutine teams_threadlimit
subroutine teams_allocate()
use omp_lib
integer :: x
+ integer :: y
! CHECK: omp.teams
- ! CHECK-SAME: allocate(%{{.+}} : i32 -> %{{.+}} : !fir.ref<i32>)
+ ! CHECK-SAME: allocate(%{{.+}} : i64 -> %{{.+}} : !fir.ref<i32>)
!$omp teams allocate(omp_high_bw_mem_alloc: x) private(x)
! CHECK: arith.addi
x = x + 12
diff --git a/flang/test/Lower/OpenMP/parallel-sections.f90 b/flang/test/Lower/OpenMP/parallel-sections.f90
index 77139e40ed8c0e..457e5b3abd54a4 100644
--- a/flang/test/Lower/OpenMP/parallel-sections.f90
+++ b/flang/test/Lower/OpenMP/parallel-sections.f90
@@ -37,12 +37,12 @@ end subroutine omp_parallel_sections
subroutine omp_parallel_sections_allocate(x, y)
use omp_lib
integer, intent(inout) :: x, y
- !CHECK: %[[allocator_1:.*]] = arith.constant 1 : i32
- !CHECK: %[[allocator_2:.*]] = arith.constant 1 : i32
+ !CHECK: %[[allocator_1:.*]] = arith.constant 4 : i64
+ !CHECK: %[[allocator_2:.*]] = arith.constant 4 : i64
!CHECK: omp.parallel allocate(
- !CHECK: %[[allocator_2]] : i32 -> %{{.*}} : !fir.ref<i32>) {
+ !CHECK: %[[allocator_2]] : i64 -> %{{.*}} : !fir.ref<i32>) {
!CHECK: omp.sections allocate(
- !CHECK: %[[allocator_1]] : i32 -> %{{.*}} : !fir.ref<i32>) {
+ !CHECK: %[[allocator_1]] : i64 -> %{{.*}} : !fir.ref<i32>) {
!$omp parallel sections allocate(omp_high_bw_mem_alloc: x)
!CHECK: omp.section {
!$omp section
diff --git a/flang/test/Lower/OpenMP/parallel.f90 b/flang/test/Lower/OpenMP/parallel.f90
index 0e43244994cfdb..c896eb1fffb04b 100644
--- a/flang/test/Lower/OpenMP/parallel.f90
+++ b/flang/test/Lower/OpenMP/parallel.f90
@@ -152,7 +152,7 @@ subroutine parallel_allocate()
use omp_lib
integer :: x
!CHECK: omp.parallel allocate(
- !CHECK: %{{.+}} : i32 -> %{{.+}} : !fir.ref<i32>
+ !CHECK: %{{.+}} : i64 -> %{{.+}} : !fir.ref<i32>
!CHECK: ) {
!$omp parallel allocate(omp_high_bw_mem_alloc: x) private(x)
!CHECK: arith.addi
@@ -193,7 +193,7 @@ subroutine parallel_multiple_clauses(alpha, num_threads)
!$omp end parallel
!CHECK: omp.parallel if({{.*}} : i1) num_threads({{.*}} : i32) allocate(
- !CHECK: %{{.+}} : i32 -> %{{.+}} : !fir.ref<i32>
+ !CHECK: %{{.+}} : i64 -> %{{.+}} : !fir.ref<i32>
!CHECK: ) {
!$omp parallel num_threads(num_threads) if(alpha .le. 0) allocate(omp_high_bw_mem_alloc: alpha) private(alpha)
!CHECK: fir.call
diff --git a/flang/test/Lower/OpenMP/sections.f90 b/flang/test/Lower/OpenMP/sections.f90
index 6bad688058d282..110c287e1c7f70 100644
--- a/flang/test/Lower/OpenMP/sections.f90
+++ b/flang/test/Lower/OpenMP/sections.f90
@@ -7,8 +7,8 @@
!CHECK: %[[COUNT:.*]] = fir.address_of(@_QFEcount) : !fir.ref<i32>
!CHECK: %[[COUNT_DECL:.*]]:2 = hlfir.declare %[[COUNT]] {uniq_name = "_QFEcount"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
!CHECK: %[[ETA:.*]] = fir.alloca f32 {bindc_name = "eta", uniq_name = "_QFEeta"}
-!CHECK: %[[CONST_1:.*]] = arith.constant 1 : i32
-!CHECK: omp.sections allocate(%[[CONST_1]] : i32 -> %[[COUNT_DECL]]#1 : !fir.ref<i32>) {
+!CHECK: %[[CONST_1:.*]] = arith.constant 4 : i64
+!CHECK: omp.sections allocate(%[[CONST_1]] : i64 -> %[[COUNT_DECL]]#1 : !fir.ref<i32>) {
!CHECK: omp.section {
!CHECK: %[[PRIVATE_ETA:.*]] = fir.alloca f32 {bindc_name = "eta", pinned, uniq_name = "_QFEeta"}
!CHECK: %[[PRIVATE_ETA_DECL:.*]]:2 = hlfir.declare %[[PRIVATE_ETA]] {uniq_name = "_QFEeta"} : (!fir.ref<f32>) -> (!fir.ref<f32>, !fir.ref<f32>)
diff --git a/flang/test/Lower/OpenMP/single.f90 b/flang/test/Lower/OpenMP/single.f90
index ffc41af84e3c21..2c31f3897fe62a 100644
--- a/flang/test/Lower/OpenMP/single.f90
+++ b/flang/test/Lower/OpenMP/single.f90
@@ -57,7 +57,7 @@ subroutine single_allocate()
integer :: x
!CHECK: omp.parallel {
!$omp parallel
- !CHECK: omp.single allocate(%{{.+}} : i32 -> %{{.+}} : !fir.ref<i32>) {
+ !CHECK: omp.single allocate(%{{.+}} : i64 -> %{{.+}} : !fir.ref<i32>) {
!$omp single allocate(omp_high_bw_mem_alloc: x) private(x)
!CHECK: arith.addi
x = x + 12
diff --git a/flang/test/Lower/OpenMP/task.f90 b/flang/test/Lower/OpenMP/task.f90
index 7d7a79af3185f5..20c01ad630dbdf 100644
--- a/flang/test/Lower/OpenMP/task.f90
+++ b/flang/test/Lower/OpenMP/task.f90
@@ -63,7 +63,7 @@ end subroutine omp_task_priority
subroutine task_allocate()
use omp_lib
integer :: x
- !CHECK: omp.task allocate(%{{.+}} : i32 -> %{{.+}} : !fir.ref<i32>) {
+ !CHECK: omp.task allocate(%{{.+}} : i64 -> %{{.+}} : !fir.ref<i32>) {
!$omp task allocate(omp_high_bw_mem_alloc: x) private(x)
!CHECK: arith.addi
x = x + 12
@@ -225,7 +225,7 @@ subroutine task_multiple_clauses()
integer :: x, y, z
logical :: buzz
- !CHECK: omp.task if(%{{.+}}) final(%{{.+}}) priority(%{{.+}}) allocate(%{{.+}} : i32 -> %{{.+}} : !fir.ref<i32>) {
+ !CHECK: omp.task if(%{{.+}}) final(%{{.+}}) priority(%{{.+}}) allocate(%{{.+}} : i64 -> %{{.+}} : !fir.ref<i32>) {
!$omp task if(buzz) final(buzz) priority(z) allocate(omp_high_bw_mem_alloc: x) private(x) firstprivate(y)
!CHECK: %[[X_PRIV_ALLOCA:.+]] = fir.alloca i32 {bindc_name = "x", pinned, uniq_name = "_QFtask_multiple_clausesEx"}
diff --git a/flang/test/Lower/OpenMP/taskgroup.f90 b/flang/test/Lower/OpenMP/taskgroup.f90
index 85dc253b59d659..74bc508c626a59 100644
--- a/flang/test/Lower/OpenMP/taskgroup.f90
+++ b/flang/test/Lower/OpenMP/taskgroup.f90
@@ -6,9 +6,9 @@ subroutine omp_taskgroup
integer :: allocated_x
!CHECK: %[[ALLOC_X_REF:.*]] = fir.alloca i32 {bindc_name = "allocated_x", uniq_name = "_QFomp_taskgroupEallocated_x"}
!CHECK-NEXT: %[[ALLOC_X_DECL:.*]]:2 = hlfir.declare %[[ALLOC_X_REF]] {uniq_name = "_QFomp_taskgroupEallocated_x"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
-!CHECK: %[[C1:.*]] = arith.constant 1 : i32
+!CHECK: %[[C4:.*]] = arith.constant 4 : i64
-!CHECK: omp.taskgroup allocate(%[[C1]] : i32 -> %[[ALLOC_X_DECL]]#1 : !fir.ref<i32>)
+!CHECK: omp.taskgroup allocate(%[[C4]] : i64 -> %[[ALLOC_X_DECL]]#1 : !fir.ref<i32>)
!$omp taskgroup allocate(omp_high_bw_mem_alloc: allocated_x)
!$omp task
!CHECK: fir.call @_QPwork() {{.*}}: () -> ()
diff --git a/flang/test/Lower/OpenMP/teams.f90 b/flang/test/Lower/OpenMP/teams.f90
index 2620d7752a4ed3..cd398e847cdbda 100644
--- a/flang/test/Lower/OpenMP/teams.f90
+++ b/flang/test/Lower/OpenMP/teams.f90
@@ -105,7 +105,7 @@ subroutine teams_allocate()
use omp_lib
integer :: x
! CHECK: omp.teams
- ! CHECK-SAME: allocate(%{{.+}} : i32 -> %{{.+}} : !fir.ref<i32>)
+ ! CHECK-SAME: allocate(%{{.+}} : i64 -> %{{.+}} : !fir.ref<i32>)
!$omp teams allocate(omp_high_bw_mem_alloc: x) private(x)
! CHECK: arith.addi
x = x + 12
diff --git a/flang/test/Parser/OpenMP/allocate-tree.f90 b/flang/test/Parser/OpenMP/allocate-tree.f90
index f04e431e74ae5d..ac99efbcad936c 100644
--- a/flang/test/Parser/OpenMP/allocate-tree.f90
+++ b/flang/test/Parser/OpenMP/allocate-tree.f90
@@ -36,8 +36,8 @@ end program allocate_tree
!CHECK-NEXT: | | | | | Designator -> DataRef -> Name =
!CHECK-NEXT: | | | AllocateStmt
-!UNPARSE: !$OMP ALLOCATE (w) ALLOCATOR(1_4)
-!UNPARSE-NEXT: !$OMP ALLOCATE (xarray) ALLOCATOR(1_4)
-!UNPARSE-NEXT: !$OMP ALLOCATE (zarray) ALLOCATOR(1_4)
+!UNPARSE: !$OMP ALLOCATE (w) ALLOCATOR(3_8)
+!UNPARSE-NEXT: !$OMP ALLOCATE (xarray) ALLOCATOR(2_8)
+!UNPARSE-NEXT: !$OMP ALLOCATE (zarray) ALLOCATOR(1_8)
!UNPARSE-NEXT: !$OMP ALLOCATE
!UNPARSE-NEXT: ALLOCATE(w, xarray(4_4), zarray(t,z))
More information about the Openmp-commits
mailing list