mirror of
https://github.com/intel/llvm.git
synced 2026-02-08 17:28:30 +08:00
[flang][OpenMP] Compile proper omp_lib.mod from the openmp/src/include sources (#80874)
This PR changes the build system to use use the sources for the module `omp_lib` and the `omp_lib.h` include file from the `openmp` runtime project and not from a separate copy of these files. This will greatly reduce potential for inconsistencies when adding features to the OpenMP runtime implementation. When the OpenMP subproject is not configured, this PR also disables the corresponding LIT tests with a "REQUIRES" directive at the beginning of the OpenMP test files. --------- Co-authored-by: Valentin Clement (バレンタイン クレメン) <clementval@gmail.com>
This commit is contained in:
@@ -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
|
||||
@@ -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
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! Verify that the omp_lib.h header is found and included correctly. This header file should be available at a path:
|
||||
! * relative to the driver, that's
|
||||
! * known the driver.
|
||||
@@ -7,11 +9,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)
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! RUN: %flang_fc1 -emit-fir -flang-deprecated-no-hlfir -fopenmp %s -o - | FileCheck %s
|
||||
|
||||
! This test checks the lowering of atomic capture
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! RUN: bbc --use-desc-for-alloc=false -fopenmp -emit-fir -hlfir=false %s -o - | FileCheck %s
|
||||
|
||||
! This test checks the lowering of atomic read
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! This test checks lowering of atomic and atomic update constructs
|
||||
! RUN: bbc --use-desc-for-alloc=false -fopenmp -emit-fir -hlfir=false %s -o - | FileCheck %s
|
||||
! RUN: %flang_fc1 -mllvm --use-desc-for-alloc=false -emit-fir -flang-deprecated-no-hlfir -fopenmp %s -o - | FileCheck %s
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! RUN: bbc --use-desc-for-alloc=false -fopenmp -emit-fir -hlfir=false %s -o - | FileCheck %s
|
||||
|
||||
! This test checks the lowering of atomic write
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
!RUN: %flang_fc1 -emit-fir -flang-deprecated-no-hlfir -fopenmp %s -o - | FileCheck %s --check-prefixes="OMPDialect"
|
||||
!RUN: %flang_fc1 -emit-fir -flang-deprecated-no-hlfir -fopenmp %s -o - | fir-opt --fir-to-llvm-ir | FileCheck %s --check-prefix="OMPDialect"
|
||||
!RUN: %flang_fc1 -emit-fir -flang-deprecated-no-hlfir -fopenmp %s -o - | fir-opt --fir-to-llvm-ir | tco | FileCheck %s --check-prefix="LLVMIR"
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
!RUN: %flang_fc1 -emit-fir -flang-deprecated-no-hlfir -fopenmp %s -o - | FileCheck %s --check-prefixes="FIRDialect,OMPDialect"
|
||||
!RUN: %flang_fc1 -emit-fir -flang-deprecated-no-hlfir -fopenmp %s -o - | fir-opt --cfg-conversion-on-func-opt | fir-opt --fir-to-llvm-ir | FileCheck %s --check-prefixes="OMPDialect,LLVMDialect"
|
||||
|
||||
@@ -38,16 +40,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
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
!RUN: %flang_fc1 -emit-fir -flang-deprecated-no-hlfir -fopenmp %s -o - | FileCheck %s --check-prefixes="FIRDialect,OMPDialect"
|
||||
!RUN: %flang_fc1 -emit-fir -flang-deprecated-no-hlfir -fopenmp %s -o - | fir-opt --fir-to-llvm-ir | FileCheck %s --check-prefixes="LLVMDialect,OMPDialect"
|
||||
|
||||
@@ -153,8 +155,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 +197,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
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! This test checks the lowering of OpenMP sections construct with several clauses present
|
||||
|
||||
! RUN: %flang_fc1 -emit-fir -flang-deprecated-no-hlfir -fopenmp %s -o - | FileCheck %s
|
||||
@@ -5,8 +7,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"}
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
!RUN: %flang_fc1 -emit-fir -flang-deprecated-no-hlfir -fopenmp %s -o - | FileCheck %s
|
||||
!RUN: bbc -emit-fir -hlfir=false -fopenmp %s -o - | FileCheck %s
|
||||
|
||||
@@ -55,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
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
!RUN: %flang_fc1 -emit-fir -flang-deprecated-no-hlfir -fopenmp %s -o - | FileCheck %s
|
||||
|
||||
!CHECK-LABEL: func @_QPomp_task_simple() {
|
||||
@@ -63,7 +65,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 +219,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
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
!RUN: %flang_fc1 -emit-fir -flang-deprecated-no-hlfir -fopenmp %s -o - | FileCheck %s
|
||||
|
||||
!CHECK-LABEL: @_QPomp_taskgroup
|
||||
@@ -5,9 +7,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() {{.*}}: () -> ()
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! RUN: %flang_fc1 -emit-fir -fopenmp %s -o - | FileCheck %s
|
||||
|
||||
! CHECK-LABEL: func @_QPteams_simple
|
||||
@@ -104,8 +106,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
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! This test checks the lowering of atomic capture
|
||||
|
||||
! RUN: bbc -fopenmp -emit-hlfir %s -o - | FileCheck %s
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! RUN: bbc -fopenmp -emit-hlfir %s -o - | FileCheck %s
|
||||
|
||||
! This test checks the lowering of atomic read
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! This test checks lowering of atomic and atomic update constructs
|
||||
! RUN: bbc -fopenmp -emit-hlfir %s -o - | FileCheck %s
|
||||
! RUN: %flang_fc1 -emit-hlfir -fopenmp %s -o - | FileCheck %s
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! RUN: bbc -fopenmp -emit-hlfir %s -o - | FileCheck %s
|
||||
|
||||
! This test checks the lowering of atomic write
|
||||
@@ -21,8 +23,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
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
!RUN: %flang_fc1 -emit-hlfir -fopenmp %s -o - | FileCheck %s
|
||||
|
||||
!CHECK: omp.critical.declare @help2
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! RUN: %flang_fc1 -emit-hlfir -fopenmp %s -o - 2>&1 | FileCheck %s
|
||||
! RUN: bbc -fopenmp -emit-hlfir -o - %s 2>&1 | FileCheck %s
|
||||
! RUN: %flang_fc1 -emit-fir -fopenmp %s -o - 2>&1 | FileCheck %s
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
!RUN: %flang_fc1 -emit-hlfir -fopenmp %s -o - | FileCheck %s
|
||||
|
||||
!===============================================================================
|
||||
@@ -37,12 +39,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
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
!RUN: %flang_fc1 -emit-hlfir -fopenmp %s -o - | FileCheck %s
|
||||
|
||||
!CHECK-LABEL: func @_QPparallel_simple
|
||||
@@ -152,7 +154,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 +195,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
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! This test checks the lowering of OpenMP sections construct with several clauses present
|
||||
|
||||
! RUN: %flang_fc1 -flang-experimental-hlfir -emit-hlfir -fopenmp %s -o - | FileCheck %s
|
||||
@@ -7,8 +9,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>)
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
!RUN: %flang_fc1 -emit-hlfir -fopenmp %s -o - | FileCheck %s
|
||||
!RUN: bbc -emit-hlfir -fopenmp %s -o - | FileCheck %s
|
||||
|
||||
@@ -57,7 +59,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
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
!RUN: %flang_fc1 -emit-hlfir -fopenmp %s -o - | FileCheck %s
|
||||
|
||||
!CHECK-LABEL: func @_QPomp_task_simple() {
|
||||
@@ -63,7 +65,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 +227,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"}
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
!RUN: %flang_fc1 -emit-hlfir -fopenmp %s -o - | FileCheck %s
|
||||
|
||||
!CHECK-LABEL: @_QPomp_taskgroup
|
||||
@@ -6,9 +8,9 @@ use omp_lib
|
||||
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() {{.*}}: () -> ()
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! RUN: %flang_fc1 -emit-hlfir -fopenmp %s -o - | FileCheck %s
|
||||
|
||||
! CHECK-LABEL: func @_QPteams_simple
|
||||
@@ -105,7 +107,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
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! Simple test for lowering of OpenMP Threadprivate Directive with HLFIR.
|
||||
|
||||
!RUN: %flang_fc1 -emit-hlfir -fopenmp %s -o - | FileCheck %s
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! RUN: %flang_fc1 -fopenmp -fdebug-dump-parse-tree %s | FileCheck %s
|
||||
! Ensures associated declarative OMP allocations in the specification
|
||||
! part are kept there
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! RUN: %flang_fc1 -fopenmp -fdebug-dump-parse-tree %s | FileCheck %s
|
||||
! RUN: %flang_fc1 -fopenmp -fdebug-unparse %s | FileCheck %s --check-prefix="UNPARSE"
|
||||
! Ensures associated declarative OMP allocations are nested in their
|
||||
@@ -36,8 +38,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))
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! RUN: %flang_fc1 -fdebug-unparse-no-sema -fopenmp %s | FileCheck --ignore-case %s
|
||||
! RUN: %flang_fc1 -fdebug-dump-parse-tree -fopenmp %s | FileCheck --check-prefix="PARSE-TREE" %s
|
||||
! Checks the parsing of Openmp 5.0 Target Device constructs
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp
|
||||
! OpenMP Version 5.2
|
||||
! The allocate clause's allocator modifier must be of type allocator_handle
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp
|
||||
! Check OpenMP Allocate directive
|
||||
use omp_lib
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp
|
||||
! OpenMP Version 5.0
|
||||
! 2.11.3 allocate Directive
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp
|
||||
! OpenMP Version 5.0
|
||||
! 2.11.3 allocate Directive
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp
|
||||
! OpenMP Version 5.0
|
||||
! 2.11.3 allocate Directive
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp
|
||||
! OpenMP Version 5.0
|
||||
! 2.11.3 allocate Directive
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp
|
||||
! OpenMP Version 5.0
|
||||
! 2.11.3 allocate Directive
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp
|
||||
! OpenMP Version 5.0
|
||||
! 2.11.3 allocate Directive
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp
|
||||
! OpenMP Version 5.0
|
||||
! 2.11.3 allocate Directive
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp
|
||||
! OpenMP Version 5.0
|
||||
! 2.11.3 allocate Directive
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp
|
||||
! OpenMP Version 5.0
|
||||
! 2.11.3 allocate Directive
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp
|
||||
! OpenMP Version 5.2
|
||||
! 6.7 allocators construct
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp
|
||||
! OpenMP Version 5.2
|
||||
! 6.7 allocators construct
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp
|
||||
! OpenMP Version 5.2
|
||||
! 6.7 allocators construct
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp
|
||||
! OpenMP Version 5.2
|
||||
! Inherited from 2.11.3 allocate Directive
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp
|
||||
! OpenMP Version 5.2
|
||||
! Inherited from 2.11.3 allocate directive
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp
|
||||
! OpenMP Version 5.2
|
||||
! Inherited from 2.11.3 allocate directive
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp
|
||||
! Semantic checks on hint clauses, as they appear on atomic constructs
|
||||
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp
|
||||
! Semantic checks for OpenMP 5.0 standard 2.17.7 atomic Construct.
|
||||
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp
|
||||
|
||||
! OpenMP Atomic construct
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp
|
||||
|
||||
! OpenMP Atomic construct
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp
|
||||
|
||||
! OpenMP Atomic construct
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! RUN: %python %S/../test_errors.py %s %flang -fopenmp
|
||||
|
||||
! This tests the various semantics related to the clauses of various OpenMP atomic constructs
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp
|
||||
use omp_lib
|
||||
! Check OpenMP clause validity for the following directives:
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp
|
||||
! Semantic checks on hint clauses, as they appear on critical construct
|
||||
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp
|
||||
! OpenMP Version 5.1
|
||||
! Check OpenMP construct validity for the following directives:
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp
|
||||
|
||||
! Check OpenMP 5.0 - 2.17.8 flush Construct
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp
|
||||
! Semantic checks for various assignments related to atomic constructs
|
||||
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! RUN: %python %S/../test_errors.py %s %flang -fopenmp
|
||||
! OpenMP version 5.0.0
|
||||
! 2.13.3 parallel sections Construct
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp
|
||||
use omp_lib
|
||||
!2.11.4 Allocate Clause
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! RUN: %python %S/../test_errors.py %s %flang -fopenmp
|
||||
! OpenMP version 5.0.0
|
||||
! 2.8.1 sections construct
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! RUN: %python %S/../test_errors.py %s %flang -fopenmp
|
||||
|
||||
! OpenMP Version 5.0
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! RUN: %python %S/../test_errors.py %s %flang -fopenmp
|
||||
|
||||
use omp_lib
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
! REQUIRES: openmp_runtime
|
||||
|
||||
! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp
|
||||
! OpenMP Version 5.1
|
||||
! Check OpenMP construct validity for the following directives:
|
||||
|
||||
@@ -200,6 +200,10 @@ result = lit_config.params.get("LIBPGMATH")
|
||||
if result:
|
||||
config.environment["LIBPGMATH"] = True
|
||||
|
||||
# Determine if OpenMP runtime was built (enable OpenMP tests via REQUIRES in test file)
|
||||
if config.have_openmp_rtl:
|
||||
config.available_features.add("openmp_runtime")
|
||||
|
||||
# Add features and substitutions to test F128 math support.
|
||||
# %f128-lib substitution may be used to generate check prefixes
|
||||
# for LIT tests checking for F128 library support.
|
||||
|
||||
@@ -25,6 +25,7 @@ config.cc = "@CMAKE_C_COMPILER@"
|
||||
config.osx_sysroot = path(r"@CMAKE_OSX_SYSROOT@")
|
||||
config.targets_to_build = "@TARGETS_TO_BUILD@"
|
||||
config.default_sysroot = "@DEFAULT_SYSROOT@"
|
||||
config.have_openmp_rtl = ("@LLVM_TOOL_OPENMP_BUILD@" == "TRUE")
|
||||
config.flang_runtime_f128_math_lib = "@FLANG_RUNTIME_F128_MATH_LIB@"
|
||||
|
||||
import lit.llvm
|
||||
|
||||
@@ -17,7 +17,6 @@ set(MODULES
|
||||
"ieee_features"
|
||||
"iso_c_binding"
|
||||
"iso_fortran_env"
|
||||
"omp_lib"
|
||||
"__fortran_builtins"
|
||||
"__fortran_type_info"
|
||||
)
|
||||
@@ -59,6 +58,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}
|
||||
@@ -71,6 +71,30 @@ 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 two module files: omp_lib.mod and omp_lib_kinds.mod. Compile these
|
||||
# files only if OpenMP support has been configured.
|
||||
if (LLVM_TOOL_OPENMP_BUILD)
|
||||
message(STATUS "OpenMP runtime support enabled via LLVM_ENABLED_PROJECTS, building omp_lib.mod")
|
||||
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}
|
||||
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 ${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
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${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")
|
||||
else()
|
||||
message(STATUS "Not building omp_lib.mod, no OpenMP runtime in LLVM_ENABLED_PROJECTS")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
add_custom_target(module_files ALL DEPENDS ${MODULE_FILES})
|
||||
@@ -87,5 +111,11 @@ if (NOT WIN32)
|
||||
endif()
|
||||
|
||||
# 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)
|
||||
install(FILES ${CMAKE_BINARY_DIR}/include/flang/OpenMP/omp_lib.h DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/flang/OpenMP")
|
||||
# Copy the generated omp_lib.h header file, if OpenMP support has been configured.
|
||||
if (LLVM_TOOL_OPENMP_BUILD)
|
||||
message(STATUS "OpenMP runtime support enabled via LLVM_ENABLED_PROJECTS, building omp_lib.h")
|
||||
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")
|
||||
else()
|
||||
message(STATUS "Not copying omp_lib.h, no OpenMP runtime in LLVM_ENABLED_PROJECTS")
|
||||
endif()
|
||||
|
||||
@@ -425,6 +425,15 @@ if(runtimes)
|
||||
# together in a single CMake invocation.
|
||||
set(extra_deps "")
|
||||
if("openmp" IN_LIST LLVM_ENABLE_RUNTIMES)
|
||||
if (${LLVM_TOOL_FLANG_BUILD})
|
||||
message(STATUS "Configuring build of omp_lib.mod and omp_lib_kinds.mod via flang-new")
|
||||
set(LIBOMP_FORTRAN_MODULES_COMPILER "${CMAKE_BINARY_DIR}/bin/flang-new")
|
||||
set(LIBOMP_MODULES_INSTALL_PATH "${CMAKE_INSTALL_INCLUDEDIR}/flang")
|
||||
# TODO: This is a workaround until flang becomes a first-class project
|
||||
# in llvm/CMakeList.txt. Until then, this line ensures that flang-new is
|
||||
# built before "openmp" is built as a runtime project.
|
||||
list(APPEND extra_deps "flang-new")
|
||||
endif()
|
||||
foreach(dep opt llvm-link llvm-extract clang clang-offload-packager)
|
||||
if(TARGET ${dep} AND OPENMP_ENABLE_LIBOMPTARGET)
|
||||
list(APPEND extra_deps ${dep})
|
||||
|
||||
@@ -316,9 +316,25 @@ endif()
|
||||
|
||||
# Building the Fortran module files
|
||||
# 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.h.var omp_lib.h @ONLY)
|
||||
configure_file(${LIBOMP_INC_DIR}/omp_lib.F90.var omp_lib.F90 @ONLY)
|
||||
|
||||
set(BUILD_FORTRAN_MODULES False)
|
||||
if (NOT ${LIBOMP_FORTRAN_MODULES_COMPILER} STREQUAL "")
|
||||
# If libomp is built as an LLVM runtime and the flang compiler is available,
|
||||
# compile the Fortran module files.
|
||||
message(STATUS "configuring openmp to build Fortran module files using ${LIBOMP_FORTRAN_MODULES_COMPILER}")
|
||||
set(LIBOMP_FORTRAN_SOURCE_FILE omp_lib.F90)
|
||||
add_custom_target(libomp-mod ALL DEPENDS omp_lib.mod omp_lib_kinds.mod)
|
||||
add_custom_command(
|
||||
OUTPUT omp_lib.mod omp_lib_kinds.mod
|
||||
COMMAND ${LIBOMP_FORTRAN_MODULES_COMPILER} -cpp -fsyntax-only ${LIBOMP_FORTRAN_SOURCE_FILE}
|
||||
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${LIBOMP_FORTRAN_SOURCE_FILE}
|
||||
${CMAKE_CURRENT_BINARY_DIR}/omp_lib.h
|
||||
)
|
||||
set(BUILD_FORTRAN_MODULES True)
|
||||
elseif(${LIBOMP_FORTRAN_MODULES})
|
||||
# The following requests explicit building of the Fortran module files
|
||||
# Workaround for gfortran to build modules with the
|
||||
# omp_sched_monotonic integer parameter
|
||||
if (CMAKE_Fortran_COMPILER_ID STREQUAL "GNU")
|
||||
@@ -327,7 +343,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()
|
||||
@@ -339,6 +355,7 @@ if(${LIBOMP_FORTRAN_MODULES})
|
||||
${CMAKE_CURRENT_BINARY_DIR}/omp_lib.h
|
||||
)
|
||||
set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES omp_lib${CMAKE_C_OUTPUT_EXTENSION})
|
||||
set(BUILD_FORTRAN_MODULES True)
|
||||
endif()
|
||||
|
||||
# Move files to exports/ directory if requested
|
||||
@@ -412,11 +429,15 @@ if(${LIBOMP_OMPT_SUPPORT})
|
||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/omp-tools.h DESTINATION ${LIBOMP_HEADERS_INSTALL_PATH} RENAME ompt.h)
|
||||
set(LIBOMP_OMP_TOOLS_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR} PARENT_SCOPE)
|
||||
endif()
|
||||
if(${LIBOMP_FORTRAN_MODULES})
|
||||
if(${BUILD_FORTRAN_MODULES})
|
||||
set (destination ${LIBOMP_HEADERS_INSTALL_PATH})
|
||||
if (NOT ${LIBOMP_MODULES_INSTALL_PATH} STREQUAL "")
|
||||
set (destination ${LIBOMP_MODULES_INSTALL_PATH})
|
||||
endif()
|
||||
install(FILES
|
||||
${CMAKE_CURRENT_BINARY_DIR}/omp_lib.h
|
||||
${CMAKE_CURRENT_BINARY_DIR}/omp_lib.mod
|
||||
${CMAKE_CURRENT_BINARY_DIR}/omp_lib_kinds.mod
|
||||
DESTINATION ${LIBOMP_HEADERS_INSTALL_PATH}
|
||||
DESTINATION ${destination}
|
||||
)
|
||||
endif()
|
||||
|
||||
@@ -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,151 @@
|
||||
|
||||
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
|
||||
|
||||
! 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@
|
||||
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_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 :: 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=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 :: 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=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 :: 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_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 :: 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_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 :: 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_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 :: 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_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 :: 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_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 :: 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_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 :: 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_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 :: 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_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 :: 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_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 :: omp_interop_none = 0
|
||||
integer (kind=omp_interop_kind), parameter, public :: omp_interop_none = 0
|
||||
|
||||
interface
|
||||
|
||||
@@ -392,82 +429,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
|
||||
@@ -568,20 +625,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
|
||||
@@ -589,7 +646,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
|
||||
@@ -599,7 +656,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
|
||||
@@ -612,6 +669,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
|
||||
@@ -625,6 +683,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
|
||||
@@ -646,8 +705,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
|
||||
@@ -659,7 +718,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
|
||||
@@ -667,21 +726,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
|
||||
@@ -900,4 +958,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
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user