blob: 8bc6b768778a37cac26bec935cc9f661be2883ab [file] [log] [blame]
! { dg-do compile }
module omp_lib_kinds
use iso_c_binding, only: c_int, c_intptr_t
implicit none
private :: c_int, c_intptr_t
integer, parameter :: omp_allocator_handle_kind = c_intptr_t
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
end module
subroutine bar (a, b, c)
implicit none
integer :: a
integer :: b
integer :: c
c = a + b
end
subroutine bar2 (a, b, c)
implicit none
integer :: a
integer :: b(15)
integer :: c
c = a + b(1)
end
subroutine foo(x, y)
use omp_lib_kinds
implicit none
integer :: x
integer :: z
integer, dimension(15) :: y
integer :: r
integer :: i
integer c1, c2, c3, c4
integer (kind=omp_allocator_handle_kind) :: h
common /B1/ c1, c2
common /B2/ c3, c4
r = 0
h = omp_default_mem_alloc;
!$omp parallel private(/B1/, c3, c4) allocate(/B1/, /B2/)
!$omp end parallel
!$omp parallel private(/B1/, /B2/) allocate(h:/B1/, /B2/)
!$omp end parallel
!$omp parallel private(/B1/, /B2/) allocate(omp_large_cap_mem_alloc:/B1/, c3, c4)
!$omp end parallel
!$omp parallel allocate (x) allocate (h : y) &
!$omp allocate (omp_large_cap_mem_alloc:z) firstprivate (x, y, z)
call bar2 (x, y, z);
!$omp end parallel
!$omp task private (x) firstprivate (z) allocate (omp_low_lat_mem_alloc:x,z)
call bar (0, x, z);
!$omp end task
!$omp target teams distribute parallel do private (x) firstprivate (y) &
!$omp allocate ((omp_default_mem_alloc + 0):z) allocate &
!$omp (omp_default_mem_alloc: x, y) allocate (h: r) lastprivate (z) reduction(+:r)
do i = 1, 10
call bar (0, x, z);
call bar2 (1, y, r);
end do
!$omp end target teams distribute parallel do
!$omp single private (x) allocate (omp_low_lat_mem_alloc:x)
x=1
!$omp end single
!$omp single allocate (omp_low_lat_mem_alloc:x) private (x)
!$omp end single
!$omp parallel
!$omp do allocate (x) private (x)
do i = 1, 64
x = 1;
end do
!$omp end parallel
!$omp sections private (x) allocate (omp_low_lat_mem_alloc: x)
x = 1;
!$omp section
x = 2;
!$omp section
x = 3;
!$omp end sections
!$omp taskgroup task_reduction(+:r) allocate (omp_default_mem_alloc : r)
call bar (r, r, r);
!$omp end taskgroup
!$omp teams private (x) firstprivate (y) allocate (h : x, y)
call bar2 (x, y, r);
!$omp end teams
!$omp taskloop lastprivate (x) reduction (+:r) allocate (h : x, r)
do i = 1, 16
call bar (0, r, r);
x = i;
end do
!$omp end taskloop
!$omp taskgroup task_reduction(+:r) allocate (omp_default_mem_alloc : r)
!$omp taskloop firstprivate (x) in_reduction (+:r) &
!$omp allocate (omp_default_mem_alloc : x, r)
do i = 1, 16
call bar (x, r, r);
end do
!$omp end taskloop
!$omp end taskgroup
!$omp taskwait
end subroutine