1deafb36fSKrzysztof Parzyszek! The "use_device_addr" was added to the "target data" directive in OpenMP 5.0. 2deafb36fSKrzysztof Parzyszek! RUN: %flang_fc1 -emit-hlfir -fopenmp -fopenmp-version=50 %s -o - | FileCheck %s 3deafb36fSKrzysztof Parzyszek! RUN: bbc -emit-hlfir -fopenmp -fopenmp-version=50 %s -o - | FileCheck %s 4096ee4e1Sagozillon 59ba41031SAkash Banerjee! This tests primary goal is to check the promotion of non-CPTR arguments from 69ba41031SAkash Banerjee! use_device_ptr to use_device_addr works, without breaking any functionality. 7096ee4e1Sagozillon 8096ee4e1Sagozillon!CHECK: func.func @{{.*}}only_use_device_ptr() 9*d84d0cafSagozillon 10*d84d0cafSagozillon!CHECK: omp.target_data use_device_addr(%{{.*}} -> %{{.*}}, %{{.*}} -> %{{.*}}, %{{.*}} -> %{{.*}}, %{{.*}} -> %{{.*}} : !fir.ref<!fir.box<!fir.ptr<!fir.array<?xf32>>>>, !fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>>, !fir.llvm_ptr<!fir.ref<!fir.array<?xf32>>>, !fir.llvm_ptr<!fir.ref<!fir.array<?xi32>>>) use_device_ptr(%{{.*}} -> %{{.*}} : !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>>) { 11096ee4e1Sagozillonsubroutine only_use_device_ptr 12096ee4e1Sagozillon use iso_c_binding 13096ee4e1Sagozillon integer, pointer, dimension(:) :: array 14096ee4e1Sagozillon real, pointer :: pa(:) 15096ee4e1Sagozillon type(c_ptr) :: cptr 16096ee4e1Sagozillon 17096ee4e1Sagozillon !$omp target data use_device_ptr(pa, cptr, array) 18096ee4e1Sagozillon !$omp end target data 19096ee4e1Sagozillon end subroutine 20096ee4e1Sagozillon 21096ee4e1Sagozillon!CHECK: func.func @{{.*}}mix_use_device_ptr_and_addr() 22*d84d0cafSagozillon!CHECK: omp.target_data use_device_addr(%{{.*}} -> %{{.*}}, %{{.*}} -> %{{.*}}, %{{.*}} -> %{{.*}}, %{{.*}} -> %{{.*}} : !fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>>, !fir.ref<!fir.box<!fir.ptr<!fir.array<?xf32>>>>, !fir.llvm_ptr<!fir.ref<!fir.array<?xi32>>>, !fir.llvm_ptr<!fir.ref<!fir.array<?xf32>>>) use_device_ptr({{.*}} : !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>>) { 23096ee4e1Sagozillonsubroutine mix_use_device_ptr_and_addr 24096ee4e1Sagozillon use iso_c_binding 25096ee4e1Sagozillon integer, pointer, dimension(:) :: array 26096ee4e1Sagozillon real, pointer :: pa(:) 27096ee4e1Sagozillon type(c_ptr) :: cptr 28096ee4e1Sagozillon 29096ee4e1Sagozillon !$omp target data use_device_ptr(pa, cptr) use_device_addr(array) 30096ee4e1Sagozillon !$omp end target data 31096ee4e1Sagozillon end subroutine 32096ee4e1Sagozillon 33096ee4e1Sagozillon !CHECK: func.func @{{.*}}only_use_device_addr() 34*d84d0cafSagozillon !CHECK: omp.target_data use_device_addr(%{{.*}} -> %{{.*}}, %{{.*}} -> %{{.*}}, %{{.*}} -> %{{.*}}, %{{.*}} -> %{{.*}}, %{{.*}} -> %{{.*}} : !fir.ref<!fir.box<!fir.ptr<!fir.array<?xf32>>>>, !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>>, !fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>>, !fir.llvm_ptr<!fir.ref<!fir.array<?xf32>>>, !fir.llvm_ptr<!fir.ref<!fir.array<?xi32>>>) { 35096ee4e1Sagozillon subroutine only_use_device_addr 36096ee4e1Sagozillon use iso_c_binding 37096ee4e1Sagozillon integer, pointer, dimension(:) :: array 38096ee4e1Sagozillon real, pointer :: pa(:) 39096ee4e1Sagozillon type(c_ptr) :: cptr 40096ee4e1Sagozillon 41096ee4e1Sagozillon !$omp target data use_device_addr(pa, cptr, array) 42096ee4e1Sagozillon !$omp end target data 43096ee4e1Sagozillon end subroutine 44096ee4e1Sagozillon 45096ee4e1Sagozillon !CHECK: func.func @{{.*}}mix_use_device_ptr_and_addr_and_map() 46*d84d0cafSagozillon !CHECK: omp.target_data map_entries(%{{.*}}, %{{.*}} : !fir.ref<i32>, !fir.ref<i32>) use_device_addr(%{{.*}} -> %{{.*}}, %{{.*}} -> %{{.*}}, %{{.*}} -> %{{.*}}, %{{.*}} -> %{{.*}} : !fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>>, !fir.ref<!fir.box<!fir.ptr<!fir.array<?xf32>>>>, !fir.llvm_ptr<!fir.ref<!fir.array<?xi32>>>, !fir.llvm_ptr<!fir.ref<!fir.array<?xf32>>>) use_device_ptr(%{{.*}} : !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>>) { 47096ee4e1Sagozillon subroutine mix_use_device_ptr_and_addr_and_map 48096ee4e1Sagozillon use iso_c_binding 49096ee4e1Sagozillon integer :: i, j 50096ee4e1Sagozillon integer, pointer, dimension(:) :: array 51096ee4e1Sagozillon real, pointer :: pa(:) 52096ee4e1Sagozillon type(c_ptr) :: cptr 53096ee4e1Sagozillon 54096ee4e1Sagozillon !$omp target data use_device_ptr(pa, cptr) use_device_addr(array) map(tofrom: i, j) 55096ee4e1Sagozillon !$omp end target data 56096ee4e1Sagozillon end subroutine 57096ee4e1Sagozillon 58096ee4e1Sagozillon !CHECK: func.func @{{.*}}only_use_map() 59*d84d0cafSagozillon !CHECK: omp.target_data map_entries(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}} : !fir.ref<!fir.box<!fir.ptr<!fir.array<?xf32>>>>, !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>>, !fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>>, !fir.llvm_ptr<!fir.ref<!fir.array<?xf32>>>, !fir.llvm_ptr<!fir.ref<!fir.array<?xi32>>>) { 60096ee4e1Sagozillon subroutine only_use_map 61096ee4e1Sagozillon use iso_c_binding 62096ee4e1Sagozillon integer, pointer, dimension(:) :: array 63096ee4e1Sagozillon real, pointer :: pa(:) 64096ee4e1Sagozillon type(c_ptr) :: cptr 65096ee4e1Sagozillon 66096ee4e1Sagozillon !$omp target data map(pa, cptr, array) 67096ee4e1Sagozillon !$omp end target data 68096ee4e1Sagozillon end subroutine 69